ns-3 เบเบฒเบ™เบชเบญเบ™ simulator เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เบšเบปเบ”เบ—เบต 5

ns-3 เบเบฒเบ™เบชเบญเบ™ simulator เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เบšเบปเบ”เบ—เบต 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 Trace

เบšเบปเบ”เบ—เบต 5

เบเบฒเบ™เบ›เบฑเบš

5.1 เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบกเบ”เบนเบ™เบšเบฑเบ™เบ—เบถเบ

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบชเบฑเป‰เบ™เป†เบขเบนเปˆเปƒเบ™เป‚เบกเบ”เบนเบ™เบšเบฑเบ™เบ—เบถเบ ns-3 เปเบฅเป‰เบงเป‚เบ”เบเบเบฒเบ™เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบซเบ™เบฑเบ‡เบชเบท first.cc. เปƒเบ™เบšเบปเบ”เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบเปˆเบญเบเบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเบ”เป„เบกเป‰.

5.1.1 เบšเบฑเบ™เบ—เบถเบเบžเบฒเบšเบฅเบงเบก

เบฅเบฐเบšเบปเบšเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบ„เบงเบฒเบก, เปเบฅเบฐ ns-3 เบšเปเปˆเบกเบตเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™. เปƒเบ™เบšเบฒเบ‡เบเปเบฅเบฐเบ™เบต, เบžเบฝเบ‡เปเบ•เปˆเบ‚เปเป‰เบ„เบงเบฒเบกเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ–เบทเบเบ‚เบฝเบ™เปƒเบชเปˆ "operator console" (เป€เบŠเบดเปˆเบ‡เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเปเบกเปˆเบ™ stderr เปƒเบ™เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ Unix). เปƒเบ™เบฅเบฐเบšเบปเบšเบญเบทเปˆเบ™เป†, เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบ•เบทเบญเบ™เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบชเบฐเปเบ”เบ‡เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก. เปƒเบ™โ€‹เบšเบฒเบ‡โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบต, เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบชเบนเปˆโ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป€เบžเบทเปˆเบญโ€‹เบญเบญเบโ€‹เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบ”เบตโ€‹เบšเบฑเบโ€‹เบ—เบตเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เบกเบปเบงโ€‹เป„เบ”เป‰โ€‹เบขเปˆเบฒเบ‡โ€‹เบงเปˆเบญเบ‡โ€‹เป„เบงโ€‹.

subHRD เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™ 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_LOG_LEVEL_INFO เป‚เบ”เบเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเปƒเบซเป‰เป„เบงเป‰ LOG_LEVEL_INFONS เบˆเบฐเบฅเบงเบกเป€เบ–เบดเบ‡ WANS_DENS. LOG_ERROR.

เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เปƒเบซเป‰เบกเบฒเป‚เบ„เบฃเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเปเบšเบšเบšเปเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเบชเบฐเป€เปเบต, เป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบ•เบฑเบ”เป„เบกเป‰ เบซเบผเบท เบญเบปเบ‡เบ›เบฐเบเบญเบšเบเบฒเบ™เบ„เบฑเบ”เป€เบฅเบทเบญเบ.

  • NS_LOG_UNCOND - เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚ (เบšเปเปˆเบกเบตเบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡).

เปเบ•เปˆเบฅเบฐเบ‚เบฑเป‰เบ™เบชเบฒเบกเบฒเบ”เบชเบญเบšเบ–เบฒเบกเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เบซเบผเบทเบชเบฐเบชเบปเบก. เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก sh NS_LOG เบซเบผเบทเป‚เบ”เบเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบเบฒเบ™เป‚เบ—เบŸเบฑเบ‡เบŠเบฑเบ™. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบฅเบฐเบšเบปเบšเบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เบกเบตเป€เบญเบเบฐเบชเบฒเบ™ Doxygen เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบกเบฑเบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰.

เบ•เบญเบ™เบ™เบตเป‰เป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบญเปˆเบฒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”เปเบฅเป‰เบง, เปƒเบซเป‰เป€เบฎเบปเบฒเปƒเบŠเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เบ™เบฑเป‰เบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบˆเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡. scratch/myfirst.ccเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฅเบงเบšเบฅเบงเบกเปเบฅเป‰เบง.

5.1.2 เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ

เปƒเบซเป‰เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก NS_LOG เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เปเบ•เปˆเบ—เปเบฒเบญเบดเบ”, เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰ bearings เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ script เบชเบธเบ”เบ—เป‰เบฒเบเบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เป„เบ”เป‰เป€เบฎเบฑเบ”เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰,

$ ./waf --run scratch/myfirst

เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบšเบดเปˆเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบˆเบฒเบเป‚เบ„เบ‡เบเบฒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ ns-3 เบ—เปเบฒเบญเบดเบ”

$ Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' 'build'
finished successfully (0.413s)
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

เบกเบฑเบ™เบ›เบฐเบเบปเบ”เบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบก "เบชเบปเปˆเบ‡" เปเบฅเบฐ "เป„เบ”เป‰เบฎเบฑเบš" เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบกเปˆเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเบˆเบฒเบ. UdpEchoClientApplication ะธ UdpEchoServerApplication. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ‚เปเปƒเบซเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบฅเบนเบเบ„เป‰เบฒเบžเบดเบกเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เบญเบ‡เบกเบฑเบ™เบœเปˆเบฒเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก NS_LOG.

เบˆเบฒเบเบ™เบตเป‰เป„เบ›, เบ‚เป‰เบญเบเบˆเบฐเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰ sh-like shell เบ—เบตเปˆเปƒเบŠเป‰ syntax "VARIABLE=value". เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰ shell เบ„เป‰เบฒเบเบ„เบท csh, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบ›เปˆเบฝเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบ›เบฑเบ™ "setenv variable value" syntax เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบ”เบ shells เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบฅเบนเบเบ„เป‰เบฒ 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

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ› sh shell 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โ€‹. เบกเบฑเบ™เบชเบฐเปเบ”เบ‡เบ—เบธเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” script. เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, เปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบกเบฑเบ™เบกเบฑเบเปƒเบŠเป‰ (เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ)NS_LOG_FUNCTION (this)... เปƒเบŠเป‰ NS_LOG_FUNCTION_NOARGS ()
เบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ static. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบฅเบฐเบšเบปเบš ns-3 เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเปƒเบ”เป†. เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”เบ—เบตเปˆเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปเบกเปˆเบ™เบ›เปˆเบญเบเปƒเบซเป‰เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ•เบปเบงเปเบšเบšเปเบ•เปˆเบฅเบฐเบ„เบปเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ echo, เบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบšเบฑเบ™เบ—เบถเบเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰.

เบ”เบฝเบงเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป‚เบ—เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เป‚เบ”เบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เบขเปˆเบฒเบ‡เปƒเบเป‰เบŠเบดเบ”, เบ—เปˆเบฒเบ™เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบชเบฑเป‰เบ™ UdpEchoClientApplication เปเบฅเบฐเบŠเบทเปˆเบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™, เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ„เบฒเบ”เบซเบงเบฑเบ‡เบงเปˆเบฒเบˆเบฐเป€เบซเบฑเบ™ C++ scope operator (: :). เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบ•เบฑเป‰เบ‡เปƒเบˆ.

เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบฎเบฝเบ™, เปเบ•เปˆเป€เบ›เบฑเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเบ”เป„เบกเป‰. เป€เบกเบทเปˆเบญเบกเบตเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เป„เบŸเบฅเปŒเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเปเบฅเบฐเบซเป‰เบญเบ‡เบฎเบฝเบ™, เบกเบฑเบ™เบกเบฑเบเบˆเบฐเป€เบ›เบฑเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบŠเบฑเป‰เบ™, เปเบ•เปˆเบ—เปˆเบฒเบ™เบ„เบงเบ™เบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบŠเบฑเป‰เบ™, เปเบฅเบฐเบกเบตเบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ”เบ”เบฝเบงเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เปเบเบเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบŠเบทเปˆเบซเบกเบฒเบเบ–เบปเปˆเบงเบˆเบฒเบเบเบฒเบ™เบ•เบฑเบ”เป„เบกเป‰เบŠเบทเปˆเปƒเบ™เปเบšเบšเบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบญเปˆเบญเบ™เป‚เบเบ™.

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เปƒเบ™เบšเบฒเบ‡เบเปเบฅเบฐเบ™เบต, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบ•เบปเบงเบˆเบดเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฑเบ™เบ—เบถเบ. เบ–เป‰เบฒเป€เบšเบดเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบชเบปเบ‡เป„เบชเบงเปˆเบฒเปเบ–เบงเบ™เบฑเป‰เบ™เบขเบนเปˆเปƒเบชโ€.Received 1024 bytes from 10.1.1.2" เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบฅเบฐเบ”เบฑเบš prefix_func เบเบฑเบšเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก NS_LOG. เบžเบฐโ€‹เบเบฒโ€‹เบเบฒเบกโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเบงเบปเบ‡เบขเบทเบกเปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบฒเบฐเบงเปˆเบฒเปเบ–เบšเบ•เบฑเป‰เบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ OR เบเบฑเบ‡เป€เบ›เบฑเบ™เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เปเปˆ Unix. เบ•เบญเบ™เบ™เบตเป‰เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปเบฅเปˆเบ™เบชเบฐเบ„เบดเบš, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒเบฅเบฐเบšเบปเบšเบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบ—เบธเบเป†เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเปƒเบซเป‰เบ–เบทเบเบ™เปเบฒเบซเบ™เป‰เบฒเบ”เป‰เบงเบเบŠเบทเปˆเบญเบปเบ‡เบ›เบฐเบเบญเบš.

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.417s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบฒเบˆเบฒเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบฅเบนเบเบ„เป‰เบฒ UDP echo เบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰เป€เบŠเบฑเปˆเบ™เบ™เบฑเป‰เบ™. เบ‚เปเป‰เบ„เบงเบฒเบก "Received 1024 bytes from 10.1.1.2"เบ›เบฐเบˆเบธเบšเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบกเบฒเบˆเบฒเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบฅเบนเบเบ„เป‰เบฒ echo. เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเบˆเบฐเบ•เป‰เบญเบ‡เบกเบฒเบˆเบฒเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ UDP echo. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบ›เบตเบ”โ€‹เปƒเบŠเป‰โ€‹เบ‡เบฒเบ™โ€‹เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ™เบตเป‰โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เปƒเบชเปˆโ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เปเบเบโ€‹เบˆเปเป‰เบฒโ€‹เบชเบญเบ‡โ€‹เป€เบกเบฑเบ”โ€‹เบ‚เบญเบ‡โ€‹เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เปƒเบ™โ€‹เบ•เบปเบงโ€‹เบ›เปˆเบฝเบ™โ€‹เบชเบฐโ€‹เบžเบฒเบšโ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบก NS_LOGโ€‹.

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func:
               UdpEchoServerApplication=level_all|prefix_func'

เบ„เปเบฒเป€เบ•เบทเบญเบ™: เปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เป€เบญเบปเบฒเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เป€เบชเบฑเป‰เบ™เปƒเบซเบกเปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ” (:), เบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบฎเบนเบšเปเบšเบšเป€เบญเบเบฐเบชเบฒเบ™. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบฐเบ„เบดเบš, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฑเบ™เบ—เบถเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเบฅเบนเบเบ„เป‰เบฒเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ echo. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ debugging.

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 bit prefix_time:

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time: UdpEchoServerApplication=level_all|prefix_func|prefix_time'

เบญเบตเบเป€เบ—เบทเปˆเบญ เปœเบถเปˆเบ‡, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เป€เบญเบปเบฒเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เป€เบชเบฑเป‰เบ™เปƒเปเปˆเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบญเบญเบ. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เปƒเบ™โ€‹เบ›เบฑเบ”โ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™ script เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ„เบงเบ™โ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบœเบปเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

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

เบˆเบทเปˆเป„เบ”เป‰เบงเปˆเบฒ script scratch/first.cc เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบŠเบตเบŸเป€เบงเบต echo เบซเบ™เบถเปˆเบ‡เบงเบดเบ™เบฒเบ—เบตเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™ เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบกเปˆเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ•เบปเบงเบˆเบดเบ‡เปƒเบ™เบงเบดเบ™เบฒเบ—เบตเบ—เปเบฒเบญเบดเบ”. เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเบฅเบนเบเบ„เป‰เบฒ echo เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เบงเบดเบ™เบฒเบ—เบตเบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ–เบฒเบกเปƒเบ™เบชเบฐเบ„เบดเบš.

เบ”เบฝเบงเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฒเบกเบ„เบงเบฒเบกเบ„เบทเบšเปœเป‰เบฒเบ‚เบญเบ‡เบเบฒเบ™เบˆเบณเบฅเบญเบ‡เปƒเบ™เบเบฒเบ™เป‚เบ— เบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ เปƒเบ™เบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเป‚เบ—เบซเบฒ HandleRead callback Send เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบŠเบตเบŸเป€เบงเบต echo. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเป€เบงเบฅเบฒเบ—เบตเปˆเบœเปˆเบฒเบ™เป„เบ›เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบœเปˆเบฒเบ™เบˆเบธเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบˆเบธเบ”เปเบกเปˆเบ™ 3,69 เบกเบดเบ™เบฅเบดเบงเบดเบ™เบฒเบ—เบต. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ echo เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบกเบฑเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒเบ‚เบญเบ‡เบŠเปˆเบญเบ‡เบ—เบฒเบ‡, เบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบงเปˆเบฒเบฅเบนเบเบ„เป‰เบฒ echo เป„เบ”เป‰เบฎเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เปเบžเบฑเบเป€เบเบฑเบ”เปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™ HandleRead เบ‚เบญเบ‡เบกเบฑเบ™.

เปƒเบ™เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ™เบตเป‰, เบกเบตเบซเบผเบฒเบเป€เบเบตเบ”เบ‚เบถเป‰เบ™เป‚เบ”เบเบ—เบตเปˆเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™. เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฒเบกเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเป‚เบ”เบเบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เบญเบปเบ‡เบ›เบฐเบเบญเบšเบšเบฑเบ™เบ—เบถเบเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบฅเบฐเบšเบปเบš. เบฅเบญเบ‡เบ•เบฑเป‰เบ‡เบ•เบปเบงเปเบ› NS_LOG เป€เบ›เบฑเบ™เบ„เปˆเบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰,

$ export 'NS_LOG=*=level_all|prefix_func|prefix_time'

เป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบ”เบฒเบงเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบกเปˆเบ™เบ•เบปเบงเปœเบฑเบ‡เบชเบทเปเบ—เบ™เบ—เบตเปˆเบชเบณเบฅเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบšเบฑเบ™เบ—เบถเบ. เบ™เบตเป‰เบˆเบฐเบฅเบงเบกเป€เบญเบปเบฒเบฅเบฒเบเบเบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เบ—เบธเบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡. เบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเบœเบฐเบฅเบดเบ”เบ„เบทเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰ (เปƒเบ™เป€เบงเบฅเบฒเบ‚เบฝเบ™เบกเบฑเบ™เบœเบฐเบฅเบดเบ” 1265 เป€เบชเบฑเป‰เบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบชเปเบฒเบฅเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เปเบญเบฑเบเป‚เบเป‰เบ”เบฝเบง), เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเปเบฅเบฐเป€เบšเบดเปˆเบ‡เปƒเบ™เบšเบฑเบ™เบ™เบฒเบ—เบดเบเบฒเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบฑเบ.

$ ./waf --run scratch/myfirst > log.out 2>&1

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เปƒเบŠเป‰เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบชเบฐเบšเบฑเบš verbose เบ—เบตเปˆเบชเบธเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบกเบตเบšเบฑเบ™เบซเบฒเปเบฅเบฐเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบœเบดเบ”เบžเบฒเบ”. เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบˆเบธเบ”เบขเบธเบ”เปเบฅเบฐเบเป‰เบฒเบงเบœเปˆเบฒเบ™เบฅเบฐเบซเบฑเบ”เปƒเบ™ debugger. เบ‚เป‰เบญเบเบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบšเบฑเบ™เบ™เบฒเบ—เบดเบเบฒเบ™เบ—เบตเปˆเบ‚เป‰เบญเบเบกเบฑเบเปเบฅเบฐเบŠเบญเบเบซเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบ„เบฒเบ”เบซเบงเบฑเบ‡เปเบฅเบฐเป€เบซเบฑเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”. เป€เบกเบทเปˆเบญเบ‚เป‰เบญเบเบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบปเปˆเบงเป„เบ›เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบœเบดเบ”เบžเบฒเบ”, เบ‚เป‰เบญเบเบเบฐเป‚เบ”เบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ debugger เป€เบžเบทเปˆเบญเป€เบˆเบฒเบฐเบฅเบปเบ‡เปƒเบ™เบšเบฑเบ™เบซเบฒ. เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเบฐเบ„เบดเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเปƒเบŠเป‰ debugger, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบžเบฒเบ”เบเบฒเบ™เบšเบดเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”. เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เปˆเบฝเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™.

5.1.3 เบเบฒเบ™เป€เบžเบตเปˆเบกเบšเบฑเบ™เบ—เบถเบเปƒเบชเปˆเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบฅเบฒเบเบเบฒเบ™เปƒเบซเบกเปˆเปƒเบชเปˆเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบ”เบเบเบฒเบ™เป‚เบ—เบซเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบšเบฑเบ™เบ—เบถเบเบˆเบฒเบเบซเบผเบฒเบเบกเบฐเบซเบฒเบžเบฒเบ. เปƒเบซเป‰เป€เบฎเบฑเบ”เบกเบฑเบ™เบขเบนเปˆเปƒเบ™ script myfirst.cc, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต "เบชเบฐเบญเบฒเบ”". เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เบญเบปเบ‡เบ›เบฐเบเบญเบšเบšเบฑเบ™เบ—เบถเบเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ™เบตเป‰:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

เบ—เปˆเบฒเบ™เบฎเบนเป‰เบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบฑเบ‡เปเบปเบ”เบˆเบฒเบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ™เบตเป‰เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก NS_LOG เปƒเบ™เบฅเบฐเบ”เบฑเบšเบ•เปˆเบฒเบ‡เป†. เบชเบทเบšเบ•เปเปˆเป€เบ”เบตเบ™เบซเบ™เป‰เบฒเปเบฅเบฐเป€เบžเบตเปˆเบกเบšเบฒเบ‡เบฅเบฒเบเบเบฒเบ™เปƒเบชเปˆเบชเบฐเบ„เบดเบš. เบกเบฐเบซเบฒเบžเบฒเบเบ—เบตเปˆเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบ‚เปเป‰เบ„เบงเบฒเบกเบฅเบฐเบ”เบฑเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเบšเบฑเบ™เบ—เบถเบเปเบกเปˆเบ™ NS_LOG_INFO. เปƒเบซเป‰เป€เบžเบตเปˆเบกเบ‚เปเป‰เบ„เบงเบฒเบก (เบžเบฝเบ‡เปเบ•เปˆเบเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเป‰เบฒเบ‡ nodes) เบ—เบตเปˆเบšเบญเบเบ—เปˆเบฒเบ™เบงเปˆเบฒเบชเบฐเบ„เบดเบšเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เป„เบฅเบเบฐ "เบเบฒเบ™เบชเป‰เบฒเบ‡ Topology". เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฎเบฑเบ”เป„เบ”เป‰เปƒเบ™ snippet เบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰,
เป€เบ›เบตเบ”เบ‚เบถเป‰เบ™ 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) เบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰. เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ›เบตเบ”เปƒเบŠเป‰เบญเบปเบ‡เบ›เบฐเบเบญเบšเบšเบฑเบ™เบ—เบถเบ FirstScript เบ•เบปเบงเบขเปˆเบฒเบ‡ เบ—เบตเปˆเบกเบตเบฅเบฐเบ”เบฑเบšเบšเปเปˆเบ•เปเปˆเบฒเบเบงเปˆเบฒ NS_LOG_INFO. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบšเบดเปˆเบ‡เบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบชเบฐเป€เบžเบฒเบฐเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เปƒเบŠเป‰เบกเบฑเบ™เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰,

$ export NS_LOG=FirstScriptExample=info

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปเบฅเปˆเบ™เบชเบฐเบ„เบฃเบดเบšเบ”เบฝเบงเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบซเบกเปˆ "เบเบฒเบ™เบชเป‰เบฒเบ‡ 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 scripts เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เบซเบผเบทเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบชเบฐเบซเบ™เบญเบ‡เบเบปเบ™เป„เบเบเบฒเบ™เปเบเบเปเบเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปเบฅเบฐเบ—เบปเปˆเบงเป‚เบฅเบเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ›เบฐเบเบฒเบ”เบ•เบปเบงเปเบเบเปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ” (เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบ—เปˆเบฒเบ™), เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰,

int
main (int argc, char *argv[])
{
...
CommandLine cmd;
cmd.Parse (argc, argv);
...
}

snippet เบชเบญเบ‡เปเบ–เบงเบ‡เปˆเบฒเบเบ”เบฒเบเบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเปƒเบ™เบชเบดเบ”เบ—เบดเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เบกเบฑเบ™เป€เบ›เบตเบ”เบ›เบฐเบ•เบนเบชเบนเปˆ ns-3 global variable and attribute system. เปƒเบซเป‰เป€เบžเบตเปˆเบกเบฅเบฐเบซเบฑเบ”เบชเบญเบ‡เปเบ–เบงเปƒเบชเปˆเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เบชเบฐเบ„เบฃเบดเบšเบซเบผเบฑเบ scratch/myfirst.cc. เบเป‰เบฒเบงเบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบฅเบงเบšเบฅเบงเบกเบชเบฐเบ„เบดเบšเปเบฅเบฐเปเบฅเปˆเบ™เบกเบฑเบ™, เป€เบกเบทเปˆเบญเปเบฅเปˆเบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰,

$ ./waf --run "scratch/myfirst --PrintHelp"

เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เบˆเบฐเบ–เบฒเบก Waf เปเบฅเปˆเบ™เบชเบฐเบ„เบฃเบดเบš scratch/myfirst เปเบฅเบฐเบœเปˆเบฒเบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ - เบเบฒเบ™โ€‹เบŠเปˆเบงเบโ€‹เป€เบซเบผเบทเบญโ€‹เบเบฒเบ™โ€‹เบžเบดเบกโ€‹. เป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบงเบปเบ‡เบขเบทเบกเปเบกเปˆเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเบŠเบตเป‰เบšเบญเบเบงเปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™เปƒเบ”เบ—เบตเปˆเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡. parser เปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฐเบเบงเบ”เบžเบปเบšเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡ - เบเบฒเบ™โ€‹เบŠเปˆเบงเบโ€‹เป€เบซเบผเบทเบญโ€‹เบเบฒเบ™โ€‹เบžเบดเบกโ€‹ เปเบฅเบฐโ€‹เบˆเบฐโ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบ„เปเบฒโ€‹เบ•เบญเบšโ€‹,

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 เปเบฅเป‰เบงเป€เบกเบทเปˆเบญเบชเบถเบเบชเบฒ script first.cc. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบซเบฑเบ™เบชเบฒเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰,

PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒ เบญเบฑเบ”เบ•เบฒเบ‚เปเป‰เบกเบนเบ™ เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ PointToPointNetDevice. เปƒเบซเป‰เปƒเบŠเป‰เบ•เบปเบงเปเบเบ argument เปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ 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. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐ override เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ™เบตเป‰เป‚เบ”เบเปƒเบŠเป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ ะฒ PointToPointHelper เบชเบนเบ‡เบเบงเปˆเบฒ. เปƒเบซเป‰เปƒเบŠเป‰เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบˆเบธเบ”เบซเบฒเบˆเบธเบ”เปเบฅเบฐเบŠเปˆเบญเบ‡เบ—เบฒเบ‡. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบฅเบถเบšเบเบฒเบ™เป‚เบ—เบญเบญเบ SetDeviceAttribute ะธ SetChannelAttribute เบˆเบฒเบเบ™เบฑเป‰เบ™ myfirst.cc, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบชเบฐเบญเบฒเบ”.

script เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ„เบงเบ™เบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเบเบฒเบ”เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ PointToPointHelper เปเบฅเบฐเบšเปเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปƒเบ”เป†เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰,

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

เบชเบทเบšเบ•เปเปˆเป€เบ”เบตเบ™เบซเบ™เป‰เบฒเปเบฅเบฐเบชเป‰เบฒเบ‡ script เปƒเบซเบกเปˆเบเบฑเบš Waf (./waff) เปเบฅเบฐเปƒเบซเป‰เบเบฑเบšเบ„เบทเบ™เปเบฅเบฐเบฅเบงเบกเป€เบญเบปเบฒเบšเบฒเบ‡เบฅเบฒเบเบเบฒเบ™เบˆเบฒเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบŠเบตเบŸเป€เบงเบต UDP echo เปเบฅเบฐเบฅเบงเบกเป€เบญเบปเบฒเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเป€เบงเบฅเบฒ.

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

เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เป€เบงเบฅเบฒเบˆเปเบฒเบฅเบญเบ‡, เป€เบงเบฅเบฒเบ—เบตเปˆเปเบžเบฑเบเป€เบเบฑเบ”เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเป€เบŠเบตเบŸเป€เบงเบต echo, เบกเบฑเบ™เปเบกเปˆเบ™ 2,00369 เบงเบดเบ™เบฒเบ—เบต.

2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1

เบ•เบญเบ™เบ™เบตเป‰เบฅเบฒเบงเป„เบ”เป‰เบฎเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เปƒเบ™ 2.25732 เบงเบดเบ™เบฒเบ—เบต. เบ™เบตเป‰เปเบกเปˆเบ™เบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบ›เบฑเบšเบญเบฑเบ”เบ•เบฒเบ‚เปเป‰เบกเบนเบ™ PointToPointNetDevice เบˆเบฒเบเบซเป‰เบฒ megabits เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเป€เบ›เบฑเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป€เบŠเบดเปˆเบ‡เปเบกเปˆเบ™ 32768 bits เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ›เปˆเบฝเบ™ DataRate เปƒเปเปˆ เป‚เบ”เบเปƒเบŠเป‰เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฎเบฑเบ”เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰, เบญเบตเบ‡เบ•เบฒเบกเบชเบนเบ” implied เป‚เบ”เบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบŠเปˆเบงเบเป€เบซเบผเบทเบญ:

$ ./waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps"

เบ™เบตเป‰เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ DataRate เปƒเบซเป‰เบเบฑเบšเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบซเป‰เบฒเป€เบกเบเบฒเบšเบดเบ”เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต. เป€เบˆเบปเป‰เบฒเบ›เบฐเบซเบฅเบฒเบ”เปƒเบˆเบเบฑเบšเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบšเป? เบกเบฑเบ™ turns เปƒเบซเป‰ เป€เบซเบฑเบ™ เบงเปˆเบฒ เปƒเบ™ เบ„เปเบฒ เบชเบฑเปˆเบ‡ เบ—เบตเปˆ เบˆเบฐ เบเบฑเบš เบ„เบทเบ™ เบžเบถเบ” เบ•เบด เบเปเบฒ เบ•เบปเป‰เบ™ เบชเบฐ เบšเบฑเบš เบ‚เบญเบ‡ script เป„เบ”เป‰ , เบžเบงเบ เป€เบฎเบปเบฒ เบเบฑเบ‡ เบˆเปเบฒ เป€เบ›เบฑเบ™ เบ•เป‰เบญเบ‡ เป„เบ”เป‰ เบเปเบฒ เบ™เบปเบ” เบเบฒเบ™ เบŠเบฑเบ เบŠเป‰เบฒ เบ‚เบญเบ‡ เบŠเปˆเบญเบ‡ เป€เบžเบทเปˆเบญ เปƒเบซเป‰ เบเบฑเบš เบ„เบงเบฒเบก เป„เบง เบ‚เบญเบ‡ เปเบชเบ‡ เป„เบ”เป‰ . เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เปƒเบซเป‰โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เป€เบžเบทเปˆเบญโ€‹เบžเบดเบกโ€‹เบ„เบธเบ™โ€‹เบฅเบฑเบโ€‹เบชเบฐโ€‹เบ™เบฐโ€‹เบŠเปˆเบญเบ‡โ€‹, เป€เบŠเบฑเปˆเบ™โ€‹เบ”เบฝเบงโ€‹เบเบฑเบ™โ€‹เบเบฑเบšโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เป€เบฎเบฑเบ”โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™โ€‹เป€เบ„เบทเบญโ€‹เบ‚เปˆเบฒเบโ€‹:

$ ./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 เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบŠเบฑเบโ€‹เบŠเป‰เบฒโ€‹เปƒเบ™ script เป„เบ”เป‰โ€‹:

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.

เป€เบˆเบปเป‰เบฒเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™เปเบ™เบงเปƒเบ”? เปƒเบซเป‰เบกเบฑเบ™เบฅเบญเบ‡. เบˆเบปเปˆเบ‡เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบชเบฐเปเบ”เบ‡เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒ override เบ„เปˆเบฒเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡ MaxPackets เปƒเบ™ script เป„เบ”เป‰. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบชเบฐเบ„เบดเบšเบ„เบทเบ™เปƒเบซเบกเปˆ. เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญ syntax เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบซเบกเปˆ. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบงเบšเบ„เบธเบกเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบŠเบธเบ”เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบฑเบ™เบ„เบปเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบญเบปเบ”เบ—เบปเบ™, เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ„เบงเบ™เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

$ ./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" argument เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบเบธเปˆเบกเบ—เบตเปˆเบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ—เบฑเบ‡เบซเบกเบปเบ” 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. เบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบขเบนเปˆเปƒเบ™ simulator.

5.2.2 เบเบฒเบ™เบˆเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡

เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบก hooks เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เป‚เบ”เบเบœเปˆเบฒเบ™เบฅเบฐเบšเบปเบšเบ„เปเบฒเบชเบฑเปˆเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฎเบฑเบ”เป„เบ”เป‰เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเป‚เบ”เบเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™ parser เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ 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 argument, เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบซเบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบœเบนเป‰เปƒเบŠเป‰เปƒเบซเบกเปˆ. เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญ. เป€เบ‚เบปเป‰เบฒ,

$ ./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, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบกเบนเบ™เบ„เปˆเบฒเปเบฅเบฐเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบปเปˆเบงเป‚เบฅเบ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เบœเบนเป‰เบ‚เบฝเบ™เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเปƒเบซเบกเปˆเปƒเบซเป‰เบเบฑเบšเบงเบฑเบ”เบ–เบธเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบžเบงเบเบกเบฑเบ™เบˆเบฐเบกเบตเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ”เบเบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบ”เบเบœเปˆเบฒเบ™เบฅเบฐเบšเบปเบšเบ„เปเบฒเบชเบฑเปˆเบ‡. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เบœเบนเป‰เบ‚เบฝเบ™ script, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบ•เบปเบงเปเบ›เปƒเบซเบกเปˆเปƒเบซเป‰เบเบฑเบšเบชเบฐเบ„เบดเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบชเบฝเบšเบžเบงเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบšเบปเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบขเปˆเบฒเบ‡เบšเปเปˆเบขเบธเบ”เบขเบฑเป‰เบ‡.

5.3 เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก

เบˆเบธเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบถเบเบชเบฒเบ•เบทเปˆเบกเบญเบตเบ, เปเบฅเบฐเบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก ns-3 เปเบกเปˆเบ™เบเบปเบ™เป„เบเบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ ns-3 เป€เบ›เบฑเบ™เป‚เบ„เบ‡เบเบฒเบ™ C ++, เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบˆเบฒเบเป‚เบ„เบ‡เบเบฒเบ™ C ++ เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰:

#include <iostream>
...
int main ()
{
...
std::cout << "The value of x is " << x << std::endl;
...
}

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป‚เบกเบ”เบนเบ™เบšเบฑเบ™เบ—เบถเบเป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบซเป‰เบเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบกเบตเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบซเบผเบฒเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบˆเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบฐเบซเบ™เบญเบ‡เบฅเบฐเบšเบปเบšเบเปˆเบญเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเป€เบซเบ”เบเบฒเบ™เบ—เบปเปˆเบงเป„เบ›เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰.

เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก ns-3 เปเบกเปˆเบ™:

  • เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™, เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ„เบงเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเปเบซเบผเปˆเบ‡เบ—เบตเปˆเบ™เบดเบเบปเบกเปเบฅเบฐเป€เบฅเบทเบญเบเบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก;

  • เบœเบนเป‰เปƒเบŠเป‰เบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡เบ„เบงเบ™เบˆเบฐเบชเบฒเบกเบฒเบ”เบ‚เบฐเบซเบเบฒเบเบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เบฎเบนเบšเปเบšเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเบœเบฐเบฅเบดเบ”เบซเบผเบทเปƒเบชเปˆเปเบซเบผเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปƒเบซเบกเปˆ, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ”เบฑเบ”เปเบ›เบ‡เบซเบผเบฑเบ simulator;

  • เบœเบนเป‰เปƒเบŠเป‰เบ‚เบฑเป‰เบ™เบชเบนเบ‡เบชเบฒเบกเบฒเบ”เบ”เบฑเบ”เปเบ›เบ‡เบซเบผเบฑเบ simulator เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเปเบซเบผเปˆเบ‡เบ•เบดเบ”เบ•เบฒเบกเปƒเบซเบกเปˆเปเบฅเบฐเบšเปˆเบญเบ™เบซเบฅเบปเป‰เบกเบˆเบปเบก. เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก ns-3 เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเป€เบญเบเบฐเบฅเบฒเบ”เปเบฅเบฐเบœเบนเป‰เบฎเบฑเบš, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบปเบ™เป„เบเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบžเบฒเบšเปƒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบซเบผเปˆเบ‡เบเบฑเบšเบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบ.

เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก ns-3 เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡ tracing เป€เบญเบเบฐเบฅเบฒเบ”เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบฎเบฑเบš, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบปเบ™เป„เบเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบžเบฒเบšเปƒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบซเบผเปˆเบ‡เบเบฑเบšเบ•เบปเบงเบฎเบฑเบš. เปเบซเบผเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปเบกเปˆเบ™เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบฅเบฐเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปเบซเบผเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบชเบฒเบกเบฒเบ”เบŠเบตเป‰เบšเบญเบเป€เบงเบฅเบฒเบ—เบตเปˆเบญเบธเบ›เบฐเบเบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป„เบ”เป‰เบฎเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบกเบตเปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ—เบตเปˆเบชเบปเบ™เปƒเบˆ.

เปเบซเบผเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เปเบกเปˆเบ™เบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒ "เบชเบปเบกเบ—เบปเบš" เบเบฑเบšเบžเบฒเบเบชเปˆเบงเบ™เบญเบทเปˆเบ™เป†เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เป‚เบ”เบเบเบฒเบ™เบซเบฅเบปเป‰เบกเบˆเบปเบก. Tracers เปเบกเปˆเบ™เบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบเบ‚เบญเบ‡เป€เบซเบ”เบเบฒเบ™เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบเปเบซเบผเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบšเปˆเบญเบ™เบซเบฅเบปเป‰เบกเบˆเบปเบก trace เบ—เบตเปˆเบˆเบฐ (เป€เบกเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเปเบซเบผเปˆเบ‡ trace เบ‚เบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ) เบžเบดเบกเบญเบญเบเบชเปˆเบงเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบŠเบธเบ”เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบš.

เป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบเบเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เบ™เบตเป‰เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ›เบฐเป€เบžเบ”เบเบฒเบ™เบซเบฅเบปเป‰เบกเบˆเบปเบกเปƒเบซเบกเปˆเบเบฑเบšเปเบซเบผเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ—เบตเปˆเบกเบตเบขเบนเปˆเป‚เบ”เบเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ”เบฑเบ”เปเบเป‰เปเบฅเบฐเบฅเบงเบšเบฅเบงเบกเปเบเบ™ simulator. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ” tracer เปƒเบซเบกเปˆเปƒเบ™ script เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบฅเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบกเบฑเบ™เบเบฑเบšเปเบซเบผเปˆเบ‡ trace เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™ simulation core เบžเบฝเบ‡เปเบ•เปˆเปเบเป‰เป„เบ‚เบชเบฐเบ„เบดเบšเบœเบนเป‰เปƒเบŠเป‰.

เปƒเบ™เบšเบปเบ”เบชเบญเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ›เบœเปˆเบฒเบ™เบšเบฒเบ‡เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบฅเปˆเบงเบ‡เปœเป‰เบฒ เปเบฅเบฐเบšเปˆเบญเบ™เบซเบฅเบปเป‰เบกเบˆเบปเบก เปเบฅเบฐเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป„เบ”เป‰เบ”เป‰เบงเบเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเปœเป‰เบญเบเบชเบธเบ”เปƒเบ™เบชเปˆเบงเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰. เป€เบšเบดเปˆเบ‡ ns-3 เบ„เบนเปˆเบกเบทเบซเบผเบทเบžเบฒเบเบชเปˆเบงเบ™เบงเบดเบ—เบตเบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปเบšเบšเบžเบดเป€เบชเบ”, เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ namespace เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปเบฅเบฐเบเบฒเบ™เบชเป‰เบฒเบ‡เปเบซเบผเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปƒเบซเบกเปˆ.

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. เปเบ–เบงเบ—เบตเบชเบญเบ‡เบกเบตเบชเบญเบ‡เบเบฒเบ™เป‚เบ—เบ”เป‰เบงเบเบงเบดเบ—เบตเบŠเป‰เบญเบ™เบเบฑเบ™. เบงเบดเบ—เบตเบเบฒเบ™ "เบžเบฒเบเปƒเบ™". เบชเป‰เบฒเบ‡FileStream() เปƒเบŠเป‰ idiom เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบšเปเปˆเป€เบ›เบตเบ”เป€เบœเบตเบเบŠเบทเปˆเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบงเบฑเบ”เบ–เบธเบชเบฐเบ•เบฃเบตเบกเป„เบŸเบฅเปŒเปƒเบ™ stack (เบšเปเปˆเบกเบตเบŠเบทเปˆเบงเบฑเบ”เบ–เบธ) เปเบฅเบฐเบชเบปเปˆเบ‡เบกเบฑเบ™เป„เบ›เบซเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบฅเบปเบ‡เป€เบฅเบดเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เปเบ•เปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบนเป‰เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบชเป‰เบฒเบ‡เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ. myfirst.tr เปเบฅเบฐเป‚เบญเบ™เบกเบฑเบ™เป„เบ› ns-3. เบžเบงเบเป€เบฎเบปเบฒเบกเบญเบšเปƒเบซเป‰ ns-3 เป€เบšเบดเปˆเบ‡เปเบเบ‡เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบชเป‰เบฒเบ‡เบกเบฒเบ•เบฐเบซเบผเบญเบ”เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบกเบฑเบ™, เปƒเบ™เป„เบฅเบเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป€เบเบตเบ”เบˆเบฒเบเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเป€เบฅเบฑเบเบ™เป‰เบญเบ (เบ„เบงเบฒเบกเบ•เบฑเป‰เบ‡เปƒเบˆ) เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš C++ stream copy constructors.

เป‚เบ—เบžเบฒเบเบ™เบญเบ เป€เบ›เบตเบ”เปƒเบŠเป‰AsciiAll() เบšเบญเบเบœเบนเป‰เบŠเปˆเบงเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก ASCII เปƒเบ™เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบญเบธเบ›เบฐเบเบญเบ™เบˆเบธเบ”เบ•เปเปˆเบˆเบธเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ (เบฅเบฐเบšเบธ) เป€เบ„เบทเปˆเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเป€เบžเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เปƒเบ™เบฎเบนเบšเปเบšเบš ASCII.

เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบš ns-2, เป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเบ•เบดเบ”เบ•เบฒเบกเปเบกเปˆเบ™เบ—เบฝเบšเป€เบ—เบปเปˆเบฒเบเบฑเบšเบˆเบธเบ”เบ•เบดเบ”เบ•เบฒเบกเบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเป€เบซเบ”เบเบฒเบ™ "+", "-", "d" เปเบฅเบฐ "r".
เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡ script เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบˆเบฒเบเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡:

$ ./waf --run scratch/myfirst

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบซเบผเบฒเบเป†เบ„เบฑเป‰เบ‡เบเปˆเบญเบ™, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบซเบผเบฒเบเบ„เบฑเป‰เบ‡เบˆเบฒเบ Waf, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ "เบชเป‰เบฒเบ‡" เบชเปเบฒเป€เบฅเบฑเบ”เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”" เบเบฑเบšเบšเบฒเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฒเบเป‚เบ„เบ‡เบเบฒเบ™เปเบฅเปˆเบ™.

เป€เบกเบทเปˆเบญเปเบฅเปˆเบ™, เป‚เบ„เบ‡เบเบฒเบ™เบˆเบฐเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบŠเบทเปˆ myfirst.tr. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ Waf, เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป„เบŸเบฅเปŒเบ–เบทเบเบชเป‰เบฒเบ‡เบšเปเปˆเป„เบ”เป‰เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เปเบ•เปˆเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต Waf เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบกเบฑเบ™. --cwd. เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบญเบฑเบ™เบ™เบตเป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เป„เบŸเบฅเปŒเบ•เบดเบ”เบ•เบฒเบก ASCII myfirst.tr เปƒเบ™เบšเบฑเบ™เบ™เบฒเบ—เบดเบเบฒเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบฑเบ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เป‰เบญเบ‡เป„เบ›เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบเบณเบฅเบฑเบ‡เบงเบดเป€เบ„เบฒเบฐเบ•เบฒเบกเบฎเบญเบ ASCII

เบกเบตเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบซเบ™เบฒเปเบซเบ™เป‰เบ™, เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เปเบกเปˆเบ™เบงเปˆเบฒเป„เบŸเบฅเปŒเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเป€เบชเบฑเป‰เบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™. เบ™เบตเป‰เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ›เปˆเบญเบ‡เบขเป‰เบฝเบกเป€เบšเบดเปˆเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบถเป‰เบ™.

เปเบ•เปˆเบฅเบฐเปเบ–เบงเปƒเบ™เป„เบŸเบฅเปŒเบเบปเบ‡เบเบฑเบšเป€เบซเบ”เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก. เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ™เบตเป‰, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เป€เบซเบ”โ€‹เบเบฒเบ™โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เปเบ–เบงโ€‹เบชเบฒเบโ€‹เบชเบปเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™โ€‹เป€เบ„เบทเบญโ€‹เบ‚เปˆเบฒเบโ€‹เบˆเบธเบ”โ€‹เบ•เปเปˆโ€‹เบˆเบธเบ”โ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบˆเบธเบ”โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบˆเปเบฒโ€‹เบฅเบญเบ‡. เปเบ–เบงเบชเบฒเบเบชเบปเปˆเบ‡เปเบกเปˆเบ™เปเบ–เบงเบ—เบตเปˆเปเบ•เปˆเบฅเบฐเบŠเบญเบ‡เบ•เป‰เบญเบ‡เบœเปˆเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบˆเบธเบ”เบซเบฒเบˆเบธเบ”. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเปเบ•เปˆเบฅเบฐเปเบ–เบงเปƒเบ™เป„เบŸเบฅเปŒเบ•เบดเบ”เบ•เบฒเบกเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ”เบฝเบง (เปเบฅเบฐเบกเบตเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบกเบฑเบ™). เบชเบฑเบ™เบเบฒเบฅเบฑเบเบ™เบตเป‰เบˆเบฐเบกเบตเบ„เบงเบฒเบกเบซเบกเบฒเบเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

+: เบเบฒเบ™เบ”เบณเป€เบ™เบตเบ™เบเบฒเบ™เบ•เปเปˆเบ„เบดเบงเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เปเบ–เบงเบญเบธเบ›เบฐเบเบญเบ™;
-: เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ”เบถเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เปเบ–เบงเบญเบธเบ›เบฐเบเบญเบ™;
d: packet เป„เบ”เป‰เบ–เบทเบเบซเบผเบธเบ”เบฅเบปเบ‡, เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเปเบ–เบงเปเบกเปˆเบ™เป€เบ•เบฑเบก;
r: packet เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเบญเบธเบ›เบฐเบเบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ.

เปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ—เบตเปˆเปƒเบเป‰เบŠเบดเบ”เบขเบนเปˆเปƒเบ™เปเบ–เบงเบ—เปเบฒเบญเบดเบ”เปƒเบ™เป„เบŸเบฅเปŒเบ•เบดเบ”เบ•เบฒเบก. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เปเบšเปˆเบ‡โ€‹เบญเบญเบโ€‹เป€เบ›เบฑเบ™โ€‹เบžเบฒเบโ€‹เบชเปˆเบงเบ™ (เบกเบต indents เป€เบžเบทเปˆเบญโ€‹เบ„เบงเบฒเบกโ€‹เบŠเบฑเบ”โ€‹เป€เบˆเบ™โ€‹) เปเบฅเบฐโ€‹เป€เบฅเบโ€‹เปเบ–เบงโ€‹เบขเบนเปˆโ€‹เป€เบšเบทเป‰เบญเบ‡โ€‹เบŠเป‰เบฒเบโ€‹:

0 +
1 2
2 /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue
3 ns3::PppHeader (
4   Point-to-Point Protocol: IP (0x0021))
6   ns3::Ipv4Header (
7     tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
8     length: 1052 10.1.1.1 > 10.1.1.2)
9     ns3::UdpHeader (
10      length: 1032 49153 > 9)
11      Payload (size=1024)

เบžเบฒเบเบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เป€เบซเบ”เบเบฒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ—เบตเปˆเบ‚เบฐเบซเบเบฒเบเบ™เบตเป‰ (เป€เบชเบฑเป‰เบ™ 0) เปเบกเปˆเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™. เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบฑเบ™เบเบฒเบฅเบฑเบ + เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เป€เบŠเบดเปˆเบ‡เบเบปเบ‡เบเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เปเบ–เบงเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆ. เบžเบฒเบเบ—เบตเบชเบญเบ‡ (เป€เบชเบฑเป‰เบ™ 1) เปเบกเปˆเบ™เป€เบงเบฅเบฒเบˆเปเบฒเบฅเบญเบ‡, เบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบงเบดเบ™เบฒเบ—เบต. เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบˆเบทเปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ–เบฒเบก UdpEchoClientApplication เป€เบฅเบตเปˆเบกเบชเบปเปˆเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เปƒเบ™เบชเบญเบ‡เบงเบดเบ™เบฒเบ—เบต. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบˆเบดเบ‡.

เบžเบฒเบเบชเปˆเบงเบ™เบ•เปเปˆเป„เบ›เบ‚เบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก (เบˆเบฒเบเปเบ–เบงเบ—เบต 2) เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเปเบซเบผเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบญเบฑเบ™เปƒเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เป€เบซเบ”เบเบฒเบ™เบ™เบตเป‰ (เบชเบฐเปเบ”เบ‡เป€เบ–เบดเบ‡เบเบฒเบ™เบ•เบฒเบกเบฎเบญเบ namespace). เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบดเบ”เป€เบ–เบดเบ‡ namespace เบ•เบดเบ”เบ•เบฒเบกเบซเบผเบฒเบเบ„เบทเบเบฑเบšเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ namespace เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ. เบฎเบฒเบเบ‚เบญเบ‡ namespace เปเบกเปˆเบ™ NodeList. เบญเบฑเบ™เบ™เบตเป‰เบเบปเบ‡เบเบฑเบšเบžเบฒเบŠเบฐเบ™เบฐเบ—เบตเปˆเบ–เบทเบเบ„เบธเป‰เบกเบ„เบญเบ‡เปƒเบ™เบฅเบฐเบซเบฑเบ” ns-3 เบซเบผเบฑเบ. เบกเบฑเบ™เบกเบต nodes เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ script. เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบชเบฒเบกเบฒเบ”เบกเบตเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบขเบนเปˆเปƒเบ™เบฎเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™, NodeList เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบกเบตเบซเบผเบฒเบเบ‚เปเป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบชเบฑเป‰เบ™ /NodeList/0 เบซเบกเบฒเบเป€เบ–เบดเบ‡ node null เปƒเบ™ NodeList, เป€เบŠเบดเปˆเบ‡เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบžเบงเบเป€เบฎเบปเบฒเบ„เบดเบ”เบงเปˆเบฒ "node 0". เปเบ•เปˆเบฅเบฐ node เบกเบตเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡. เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเบ•เปเปˆเป„เบ›เปƒเบ™ namespace. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเป€เบซเบ”เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ™เบตเป‰เบกเบฒเบˆเบฒเบ เบฅเบฒเบเบเบฒเบ™เบญเบธเบ›เบฐเบเบญเบ™/0, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบญเบธเบ›เบฐเบเบญเบ™ null เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ node.

เปเบ–เบงเบเปˆเบญเบเบ•เปเปˆเป„เบ›, $ ns3 :: PointToPointNetDevice, เบšเบญเบเบญเบธเบ›เบฐเบเบญเบ™เปƒเบ”เบขเบนเปˆเบ—เบตเปˆเบชเบนเบ™: เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบญเบธเบ›เบฐเบเบญเบ™เบ‚เบญเบ‡ node zero. เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ + เบ—เบตเปˆเบžเบปเบšเปƒเบ™เปเบ–เบง 0 เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบซเบ™เบถเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเบ„เบดเบงเบชเบปเปˆเบ‡เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เบžเบฒเบเบชเปˆเบงเบ™เบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡ "เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ•เบดเบ”เบ•เบฒเบก": TxQueue/Enqueue.

เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™ intuitive เบเบธเบ•เบดเบ—เปเบฒ. เปเบ–เบงเบ—เบต 3-4 เบŠเบตเป‰เบšเบญเบเบงเปˆเบฒเปเบžเบฑเบเป€เบเบฑเบ”เบ–เบทเบเบซเบธเป‰เบกเบขเบนเปˆเปƒเบ™เป‚เบ›เบฃเป‚เบ•เบ„เปเบˆเบธเบ”เบซเบฒเบˆเบธเบ”. เปเบ–เบงเบ—เบต 5-7 เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเปเบžเบฑเบเป€เบเบฑเบ”เบกเบตเบซเบปเบงเป€เบงเบตเบŠเบฑเปˆเบ™ IP4 เปเบฅเบฐเบกเบฒเบˆเบฒเบเบ—เบตเปˆเบขเบนเปˆ IP 10.1.1.1 เปเบฅเบฐเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบชเปเบฒเบฅเบฑเบš 10.1.1.2. เปเบ–เบง 8-9 เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเปเบžเบฑเบเป€เบเบฑเบ”เบ™เบตเป‰เบกเบตเบซเบปเบง UDP เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบเป€เบชเบฑเป‰เบ™ 10 เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒ payload เปเบกเปˆเบ™เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบกเบต 1024 bytes.

เปเบ–เบงเบ•เปเปˆเป„เบ›เปƒเบ™เป„เบŸเบฅเปŒเบ•เบดเบ”เบ•เบฒเบกเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเปเบžเบฑเบเป€เบเบฑเบ”เบ”เบฝเบงเบเบฑเบ™เบ–เบทเบเบ”เบถเบ‡เบญเบญเบเบˆเบฒเบเปเบ–เบงเบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเปƒเบ™ node เบ”เบฝเบงเบเบฑเบ™.

เปเบ–เบงเบ—เบตเบชเบฒเบกเปƒเบ™เป„เบŸเบฅเปŒเบ•เบดเบ”เบ•เบฒเบกเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเปเบžเบฑเบเป€เบเบฑเบ”เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเบญเบธเบ›เบฐเบเบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ echo server. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบœเบฐเบฅเบดเบ”เบ„เบทเบ™เป€เบซเบ”เบเบฒเบ™เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

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 เปเบฅเบฐ Link Delay เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบขเบนเปˆเปƒเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เบ„เบงเบฒเบกเป€เบ„เบฑเปˆเบ‡เบ•เบถเบ‡เบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบ„เบธเป‰เบ™เป€เบ„เบตเบ, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เปƒเบ™เบžเบฒเบเบเปˆเบญเบ™.

เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™ namespace เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒ (เปเบ–เบง 2) เป„เบ”เป‰เบ–เบทเบเบ”เบฑเบ”เปเบเป‰เป€เบžเบทเปˆเบญเบชเบฐเบ—เป‰เบญเบ™เบงเปˆเบฒเป€เบซเบ”เบเบฒเบ™เบ™เบตเป‰เบกเบฒเบˆเบฒเบ node 1 (/NodeList/1โ€‹) เปเบฅเบฐโ€‹เบŠเบญเบ‡โ€‹เปเบกเปˆเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เป‚เบ”เบโ€‹เปเบซเบผเปˆเบ‡โ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบก (/MacRx). เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ‡เปˆเบฒเบเบžเปเบชเบปเบกเบ„เบงเบ™เบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบœเปˆเบฒเบ™ topology เป‚เบ”เบเป€เบšเบดเปˆเบ‡เบฎเปˆเบญเบ‡เบฎเบญเบเบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒ.

5.3.2 PCAP Trace

เบ•เบปเบงเบŠเปˆเบงเบเบญเบธเบ›เบฐเบเบญเบ™ ns-3 เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปƒเบ™เบฎเบนเบšเปเบšเบš .pcap. เบ•เบปเบงเบซเบเปเป‰ pcap (เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบ‚เบฝเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเบžเบดเบกเบ™เป‰เบญเบ) เบซเบเปเป‰เบกเบฒเบˆเบฒเบเบเบฒเบ™เบˆเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ” เปเบฅเบฐเบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™ API เบ—เบตเปˆเบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบฎเบนเบšเปเบšเบšเป„เบŸเบฅเปŒ .pcap. เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ™เบดเบเบปเบกเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เปเบฅเบฐเบชเบฐเปเบ”เบ‡เบฎเบนเบšเปเบšเบšเบ™เบตเป‰เปเบกเปˆเบ™ Wireshark (เป€เบกเบทเปˆเบญเบเปˆเบญเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒ Ethereal). เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบกเบตเบซเบผเบฒเบเบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ—เบตเปˆเปƒเบŠเป‰เบฎเบนเบšเปเบšเบšเปเบžเบฑเบเป€เบเบฑเบ”เบ™เบตเป‰. เบžเบงเบเป€เบฎเบปเบฒเบŠเบธเบเบเบนเป‰เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ—เบตเปˆเบกเบตเบขเบนเปˆเป€เบžเบทเปˆเบญเบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก pcap. เปƒเบ™เบšเบปเบ”เบชเบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก pcap เป‚เบ”เบเปƒเบŠเป‰ tcpdump.

เบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™ pcap tracing เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เปœเบถเปˆเบ‡เปเบ–เบง.

pointToPoint.EnablePcapAll ("myfirst");

เบงเบฒเบ‡เบฅเบฐเบซเบฑเบ”เป€เบชเบฑเป‰เบ™เบ™เบตเป‰เบซเบผเบฑเบ‡เบˆเบฒเบเบฅเบฐเบซเบฑเบ”เบ•เบดเบ”เบ•เบฒเบก ASCII เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบซเบฒเบเปเปˆเป€เบžเบตเปˆเบกเปƒเบชเปˆ scratch/myfirst.cc. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบœเปˆเบฒเบ™เบชเบฒเบ "myfirst", เบšเปเปˆเปเบกเปˆเบ™ "myfirst.pcap" เบซเบผเบทเบชเบดเปˆเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบเป‰เบญเบ™เบงเปˆเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเป€เบ›เบฑเบ™เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ, เบšเปเปˆเปเบกเปˆเบ™เบŠเบทเปˆเป€เบ•เบฑเบก. เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡, เบœเบนเป‰เบŠเปˆเบงเบเบ•เบปเบงเบˆเบดเบ‡เบˆเบฐเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบ•เบดเบ”เบ•เบฒเบกเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบญเบธเบ›เบฐเบเบญเบ™เบˆเบธเบ”. เบŠเบทเปˆเป„เบŸเบฅเปŒเบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ, เบˆเปเบฒเบ™เบงเบ™ node, เบˆเปเบฒเบ™เบงเบ™เบญเบธเบ›เบฐเบเบญเบ™, เปเบฅเบฐเบ„เปเบฒเบ•เปเปˆเบ—เป‰เบฒเบ ".pcap".

เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบชเบฐโ€‹เบ„เบฃเบดเบšโ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹เบชเบดเป‰เบ™โ€‹เบชเบธเบ”โ€‹เป€เบ–เบดเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบšเบดเปˆเบ‡โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบŠเบทเปˆ "myfirst-0-0.pcap"เปเบฅเบฐ"myfirst-1-0.pcap", เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก pcap เบชเปเบฒเบฅเบฑเบš node 0-device 0 เปเบฅเบฐ node 1-device 0 เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป„เบ”เป‰เป€เบžเบตเปˆเบกเป€เบชเบฑเป‰เบ™เบฅเบฐเบซเบฑเบ”เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰ pcap tracing, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบฅเปˆเบ™เบชเบฐเบ„เบดเบšเป„เบ”เป‰เบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบด:

$ ./waf --run scratch/myfirst

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบซเบฑเบ™เบชเบฒเบกเป„เบŸเบฅเปŒ: เป„เบŸเบฅเปŒเบ•เบดเบ”เบ•เบฒเบก ASCII. myfirst.tr, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบถเบเบชเบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เป„เบŸเบฅเปŒ myfirst-0-0.pcap ะธ myfirst-1-0.pcap - เป„เบŸเบฅเปŒ pcap เปƒเบซเบกเปˆเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบซเบฒเบเปเปˆเบชเป‰เบฒเบ‡.

เบเบฒเบ™เบญเปˆเบฒเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ”เป‰เบงเบ tcpdump

เบชเปเบฒเบฅเบฑเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเป€เบšเบดเปˆเบ‡เป„เบŸเบฅเปŒ pcap เปเบกเปˆเบ™เบเบฒเบ™เปƒเบŠเป‰ tcpdump.

$ tcpdump -nn -tt -r myfirst-0-0.pcap
reading from file myfirst-0-0.pcap, link-type PPP (PPP)
2.000000 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.514648 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024
tcpdump -nn -tt -r myfirst-1-0.pcap
reading from file myfirst-1-0.pcap, link-type PPP (PPP)
2.257324 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.257324 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024

เปƒเบ™เบšเปˆเบญเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญ myfirst-0-0.pcap (เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™โ€‹เบฅเบนเบโ€‹เบ„เป‰เบฒโ€‹) เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบŠเบญเบ‡ echo เบ–เบทเบโ€‹เบชเบปเปˆเบ‡โ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบ 2 เบงเบดโ€‹เบ™เบฒโ€‹เบ—เบตโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบˆเปเบฒโ€‹เบฅเบญเบ‡โ€‹. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ—เบตเบชเบญเบ‡ (myfirst-1-0.pcap), เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒเปเบžเบฑเบเป€เบเบฑเบ”เป„เบ”เป‰เบฎเบฑเบšเบขเบนเปˆเบ—เบตเปˆ 2,257324 เบงเบดเบ™เบฒเบ—เบต. เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เปƒเบ™ dump เบ—เบตเบชเบญเบ‡เบงเปˆเบฒ packet เป„เบ”เป‰เบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™เบขเบนเปˆเบ—เบตเปˆ 2.257324 เบงเบดเบ™เบฒเบ—เบต, เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบเบงเปˆเบฒ packet เป„เบ”เป‰เบ–เบทเบเบฎเบฑเบšเบ„เบทเบ™เป‚เบ”เบเบฅเบนเบเบ„เป‰เบฒเปƒเบ™เบเบฒเบ™ dump เบ—เปเบฒเบญเบดเบ”เบขเบนเปˆเบ—เบตเปˆ 2.514648 เบงเบดเบ™เบฒเบ—เบต.

เบเบฒเบ™เบญเปˆเบฒเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ”เป‰เบงเบ Wireshark

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบš Wireshark, เบกเบตเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เบฒเบงเบ™เปŒเป‚เบซเบฅเบ”เป‚เบ„เบ‡เบเบฒเบ™เปเบฅเบฐเป€เบญเบเบฐเบชเบฒเบ™: http://www.wireshark.org/. Wireshark เปเบกเปˆเบ™ GUI เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เป„เบŸเบฅเปŒเบ•เบดเบ”เบ•เบฒเบกเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบต Wireshark, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เป„เบŸเบฅเปŒเบ•เบดเบ”เบ•เบฒเบกเปƒเบ”เป†เปเบฅเบฐเบชเบฐเปเบ”เบ‡เป€เบ™เบทเป‰เบญเบซเบฒเบ„เบทเบเบฑเบšเบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบˆเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰ packet sniffer.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™