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
ืืืื ืืืจ ืืขื ื ื ืืฉื ืืึทืงืึทื ื ืืื ืืืืจืขืฉืึทืจืง, ืขืก ืืื ืึท ืืืขืืืืืื ืคืื ืืืึธืก ืืืจ ืงืขื ืขื ืืจืืคืงืืคืืข ืืืืื ืืื ืืึทืงืืืืขื ืืืืฉืึทื:
ืืงืืจ: www.habr.com