ns-3 network simulator tutorial. Kapitulo 5

ns-3 network simulator tutorial. Kapitulo 5
kapitulo 1,2
kapitulo 3
kapitulo 4

5 Mga setting
5.1 Paggamit sa logging module
5.1.1 Overview sa pag-log
5.1.2 I-enable ang pag-log
5.1.3 Pagdugang sa pag-log sa imong code
5.2 Paggamit sa mga argumento sa command line
5.2.1 Pag-override sa default nga mga hiyas sa hiyas
5.2.2 Pagkuha sa imong kaugalingong mga sugo
5.3 Paggamit sa sistema sa pagsubay
5.3.1 Pagsubay sa ASCII
Pag-parse sa mga pagsubay sa ASCII
5.3.2 Pagsubay sa PCAP

Kapitulo 5

kausaban

5.1 Paggamit sa logging module

Gitan-aw na namo sa makadiyot ang ns-3 logging module pinaagi sa pagtan-aw sa script una.cc. Niini nga kapitulo, atong tan-awon pag-ayo ang posible nga paggamit sa subsystem sa pag-log.

5.1.1 Overview sa pag-log

Daghang dagkong mga sistema ang nagsuporta sa usa ka matang sa pasilidad sa pag-log sa mensahe, ug ang ns-3 dili eksepsiyon. Sa pipila ka mga kaso, ang mga mensahe sa sayup lamang ang gisulat sa "operator console" (nga kasagaran stderr sa mga sistema nga nakabase sa Unix). Sa ubang mga sistema, ang mga mensahe sa pasidaan mahimong ipakita ingon man ang mas detalyado nga impormasyon. Sa pipila ka mga kaso, ang mga himan sa pag-log gigamit sa pag-output sa mga mensahe sa pag-debug nga dali nga makapaburot sa output.

Ang subHRD nga gigamit sa ns-3 nagtuo nga kining tanan nga lebel sa sulod sa impormasyon mapuslanon, ug naghatag kami og pinili, lut-od nga pamaagi sa pag-log sa mensahe. Ang pag-log mahimong hingpit nga ma-disable, ma-enable sa per-component nga basehan, o sa tibuok kalibutan. Alang niini nga katuyoan, gigamit ang adjustable nga lebel sa sulud sa kasayuran. Ang ns-3 logging module naghatag ug medyo simple nga paagi para makakuha ug mapuslanong impormasyon gikan sa imong simulation.

Kinahanglan nimong masabtan nga naghatag kami usa ka mekanismo sa kinatibuk-ang katuyoan - pagsubay - alang sa pagkuha sa mga datos gikan sa imong mga modelo, nga kinahanglan nga gusto nga output alang sa mga simulation (alang sa dugang nga kasayuran sa among sistema sa pagsubay, tan-awa ang seksyon sa tutorial 5.3). Ang pag-log kinahanglan mao ang gusto nga paagi sa pagkuha sa impormasyon sa pag-debug, mga pasidaan, mga mensahe sa sayup, o alang sa dali nga pag-output sa mga mensahe gikan sa imong mga script o modelo sa bisan unsang oras.

Sa pagkakaron, ang sistema naghubit sa pito ka lebel (mga matang) sa mga mensahe sa log sa pagdugang sa han-ay sa sulod sa impormasyon.

  • LOG_ERROR - logging error messages (may kalabutan nga macro: NS_LOG_ERROR);
  • LOG_WARN - Log warning messages (may kalabutan nga macro: NS_LOG_WARN);
  • LOG_DEBUG - Pag-log medyo talagsaon nga espesyal nga debug nga mga mensahe (may kalabutan nga macro: NS_LOG_DEBUG);
  • LOG_INFO - pagrehistro sa mga mensahe sa impormasyon bahin sa pag-uswag sa programa (may kalabutan nga macro: NS_LOG_INFO);
  • LOG_FUNCTION - Nag-log sa mga mensahe nga naghulagway sa matag function nga gitawag (duha ka may kalabutan nga macros: NS_LOG_FUNCTION, gigamit alang sa mga gimbuhaton sa miyembro, ug NS_LOG_FUNCTION_NOARGS, gigamit alang sa static nga mga gimbuhaton);
  • LOG_LOGIC - logging messages nga naghulagway sa lohikal nga dagan sulod sa usa ka function (may kalabutan nga macro: NS_LOG_LOGIC);
  • LOG_ALL - Gi-log ang tanan nga gihisgutan sa ibabaw (walay kaubang macro).
    Alang sa matag tipo (LOG_TYPE) aduna usay LOG_LEVEL_TYPE nga, kung gamiton, gitugotan ang tanan nga lebel sa ibabaw niini nga ma-log dugang sa kaugalingon nga lebel. (Ingon usa ka sangputanan, ang LOG_ERROR ug LOG_LEVEL_ERROR, ug LOG_ALL ug LOG_LEVEL_ALL parehas nga magamit.) Pananglitan, ang pagpagana sa LOG_INFO motugot lamang sa mga mensahe nga gihatag sa NS_LOG_INFO macro, samtang ang pagpagana sa LOG_LEVEL_INFO maglakip usab sa mga mensahe nga gihatag sa mga macros,_LOGER_LOGER_DEBUGNS

Naghatag usab kami usa ka walay kondisyon nga macro sa pag-log nga kanunay nga gipakita, bisan unsa pa ang lebel sa pag-log o ang bahin sa pagpili.

  • NS_LOG_UNCOND - Walay kondisyon nga pag-log sa kaubang mensahe (walay kalambigitan nga lebel sa pag-log).

Ang matag ang-ang mahimong pangutan-on sa tinagsa-tagsa o ​​kumulatibo. Ang pag-log mahimong ma-configure gamit ang sh environment variable NS_LOG o pinaagi sa pag-log sa usa ka tawag sa function sa sistema. Sama sa gipakita sa sayo pa, ang logging system adunay dokumentasyon sa Doxygen ug karon ang maayong panahon sa pagrepaso niini kung wala ka pa.

Karon nga imong nabasa ang dokumentasyon sa daghang detalye, atong gamiton kana nga kahibalo aron makakuha og pipila ka makapaikag nga impormasyon gikan sa panig-ingnan nga script scratch/myfirst.ccnga imo nang gi-compile.

5.1.2 I-enable ang pag-log

Gamiton nato ang NS_LOG environment variable aron magpadagan og dugang nga mga troso, apan una, aron lang makuha ang imong mga bearings, padagana ang kataposang script sama sa imong gibuhat kaniadto,

$ ./waf --run scratch/myfirst

Imong makita ang pamilyar nga output gikan sa unang ns-3 nga pananglitan nga programa

$ 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

Mopatim-aw nga ang "gipadala" ug "nadawat" nga mga mensahe nga imong makita sa ibabaw kay tinuod nga na-log nga mga mensahe gikan sa UdpEchoClientApplication ΠΈ UdpEchoServerApplication. Pananglitan, mahimo natong hangyoon ang aplikasyon sa kliyente sa pag-imprinta og dugang nga impormasyon pinaagi sa pagtakda sa lebel sa pag-log niini pinaagi sa NS_LOG environment variable.

Sukad karon, ako maghunahuna nga ikaw naggamit ug sh-like shell nga naggamit sa "VARIABLE=value" syntax. Kung naggamit ka ug csh-like shell, nan kinahanglan nimo nga i-convert ang akong mga pananglitan sa "setenv variable value" syntax nga gikinahanglan sa mga shell.

Sa pagkakaron, ang UDP echo client application motubag sa mosunod nga linya sa code in scratch/myfirst.cc,

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);

Kini makahimo sa logging nga lebel LOG_LEVEL_INFO. Kung nagpasa kami sa usa ka bandila nga lebel sa pag-log, mahimo gyud namon kana nga lebel ug ang tanan nga ubos nga lebel. Niini nga kaso, among gipalihok ang NS_LOG_INFO, NS_LOG_DEBUG, NS_LOG_WARN ug NS_LOG_ERROR. Madugangan namon ang lebel sa pag-log ug makakuha dugang nga kasayuran, nga wala’y mga pagbag-o sa script ug pag-recompilation, pinaagi sa pagtakda sa variable sa palibot sa NS_LOG ingon sa mosunod:

$ export NS_LOG=UdpEchoClientApplication=level_all

Busa among gibutang ang sh shell variable NS_LOG sa mosunod nga bili,

UdpEchoClientApplication=level_all

Ang wala nga bahin sa assignment mao ang ngalan sa na-log nga component nga gusto namong i-configure, ug ang tuo nga kilid mao ang bandila nga gusto namong iaplay niini. Sa kini nga kaso, mahimo namon ang tanan nga lebel sa pag-debug sa aplikasyon. Kung gipadagan nimo ang script nga adunay NS_LOG nga gitakda niining paagiha, ang ns-3 logging system modawat sa mga pagbag-o ug kinahanglan nimo nga makita ang mosunod nga output:

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

Ang dugang nga impormasyon sa pag-debug nga gihatag sa aplikasyon anaa na sa lebel sa NS_LOG_FUNCTION. Gipakita niini ang matag higayon sa usa ka tawag sa function sa panahon sa pagpatuman sa script. Ingon sa usa ka kinatibuk-ang lagda, sa mga function sa pamaagi mas maayo nga gamiton (sa labing gamay)NS_LOG_FUNCTION (this). Paggamit NS_LOG_FUNCTION_NOARGS ()
lamang sa static function. Apan, timan-i nga ang ns-3 nga sistema wala kinahanglana sa pagsuporta sa bisan unsa nga logging functionality. Ang desisyon bahin sa kung unsa kadaghan nga impormasyon ang natala gibilin sa indibidwal nga developer sa modelo. Sa kaso sa mga aplikasyon sa echo, ang usa ka dako nga kantidad sa logging output anaa.

Mahimo nimong tan-awon ang usa ka log sa mga tawag sa function nga gihimo sa aplikasyon. Kung tan-awon nimo pag-ayo, imong mamatikdan ang usa ka colon taliwala sa linya UdpEchoClientApplication ug ang ngalan sa pamaagi, diin mahimo nimong madahom nga makita ang C++ scope operator (: :). Kini mao ang tinuyo.

Dili gyud kini ang ngalan sa klase, apan ang ngalan sa sangkap sa pag-log. Kung adunay usa ka panagsama tali sa usa ka gigikanan nga file ug usa ka klase, kasagaran kini ang ngalan sa klase, apan kinahanglan nimong mahibal-an nga dili gyud kini ang ngalan sa klase, ug adunay usa ka colon imbis nga doble nga colon. Kini usa ka paagi aron matabangan ka nga mabulag ang ngalan sa logging bean gikan sa ngalan sa klase sa medyo maliputon nga paagi.

Bisan pa, sa pipila ka mga kaso mahimo’g lisud ang pagtino kung unsang pamaagi ang tinuud nga nagpatungha sa mensahe sa log. Kung imong tan-awon ang teksto sa ibabaw, tingali nahibulong ka kung asa ang linya "Received 1024 bytes from 10.1.1.2" Masulbad nimo kini nga problema pinaagi sa pagtakda sa lebel prefix_func ngadto sa NS_LOG environment variable. Sulayi ang mosunod:

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'

Timan-i nga ang mga marka sa kinutlo gikinahanglan tungod kay ang bertikal nga bar nga atong gigamit sa pagrepresentar sa OR nga operasyon kay usa usab ka Unix pipe connector. Karon kung gipadagan nimo ang script, imong makita nga ang sistema sa pag-log nagsiguro nga ang matag mensahe sa usa ka gihatag nga log adunay prefix nga ngalan sa sangkap.

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

Karon imong makita nga ang tanan nga mga mensahe gikan sa UDP echo client application giila nga ingon niana. Mensahe"Received 1024 bytes from 10.1.1.2" karon klaro nga giila nga gikan sa aplikasyon sa echo client. Ang nahabilin nga mensahe kinahanglan nga gikan sa aplikasyon sa UDP echo server. Mahimo nato kini nga component pinaagi sa pagsulod sa usa ka colon-separated list sa mga component sa NS_LOG environment variable.

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

Pasidaan: Sa pananglitan nga teksto sa ibabaw, kinahanglan nimong tangtangon ang karakter sa bag-ong linya pagkahuman sa colon (:), kini gigamit sa pag-format sa dokumento. Karon kung gipadagan nimo ang script, imong makita ang tanan nga mga mensahe sa log gikan sa kliyente ug mga aplikasyon sa echo sa server. Imong makita nga kini mahimong mapuslanon kaayo sa pag-debug.

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

Kini usab usahay mapuslanon nga makita ang simulation time diin ang log message namugna. Mahimo nimo kini pinaagi sa pagdugang sa OR bit prefix_time:

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

Pag-usab, kinahanglan nimong tangtangon ang bag-ong linya sa ibabaw nga karakter. Kung gipadagan nimo karon ang script kinahanglan nimo nga makita ang mosunud nga output:

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

Palihug timan-i nga ang constructor alang sa UdpEchoServer gitawag sa panahon sa simulation 0 segundos. Kini tinuod nga mahitabo sa wala pa magsugod ang simulation, apan ang oras gipakita nga zero segundos. Tinuod usab kini alang sa mensahe sa constructor 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()

Hinumdomi nga ang script scratch/first.cc gisugdan ang aplikasyon sa echo server usa ka segundo sa wala pa magsugod ang simulation. Karon imong makita nga ang pamaagi StartApplication ang server gitawag sa una nga segundo. Mahimo usab nimong mamatikdan nga ang kliyente sa echo magsugod sa ikaduha nga segundo sa simulation, ingon sa among gipangutana sa script.

Mahimo nimong sundon ang pag-uswag sa simulation sa tawag Iskedyul Transmit sa kliyente nga nagtawag sa HandleRead callback Ipadala sa echo server application. Timan-i nga ang milabay nga oras sa pagpadala sa usa ka pakete sa usa ka point-to-point nga link mao ang 3,69 milliseconds. Imong makita nga ang echo server nag-log sa usa ka mensahe nga kini mitubag sa packet, ug unya, human sa usa ka channel delay, imong makita nga ang echo client nakadawat sa echo packet sa iyang HandleRead nga pamaagi.

Niini nga simulation, daghan ang mahitabo nga wala nimo namatikdan. Apan dali ra nimo masubay ang tibuuk nga proseso pinaagi sa pagpagana sa tanan nga mga sangkap sa pag-log sa sistema. Sulayi ang pagbutang sa NS_LOG variable sa mosunod nga kantidad,

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

Ang asterisk sa ibabaw kay wildcard nga karakter para sa logging component. Iapil niini ang tanang entries sa tanang component nga gigamit sa simulation. Dili nako i-reproduce ang output dinhi (sa panahon sa pagsulat naghimo kini og 1265 nga mga linya sa output alang sa usa ka echo packet), apan mahimo nimong i-redirect kini nga impormasyon sa usa ka file ug tan-awon kini sa imong paborito nga editor.

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

Ako personal nga naggamit niining hilabihan ka verbose nga bersyon sa pag-log kung ako adunay problema ug wala'y ideya kung diin ang mga butang nasayop. Dali ra nako masundan ang pagpatuman sa code nga wala magbutang mga breakpoints ug lakang sa code sa debugger. Mahimo ra nako i-edit ang output sa akong paborito nga editor ug pangitaon kung unsa ang akong gipaabut ug makita ang usa ka butang nga mahitabo nga wala nako damha. Sa higayon nga ako adunay usa ka kinatibuk-ang ideya kung unsa ang sayup, molukso ako sa debugger aron mahibal-an ang problema. Kini nga matang sa output mahimong labi ka mapuslanon kung ang imong script adunay usa ka butang nga wala damha. Kung gigamit ra nimo ang debugger, mahimo nimong makalimtan ang usa ka twist sa hingpit. Ang pagrehistro naghimo sa ingon nga mga pagliko nga mamatikdan.

5.1.3 Pagdugang sa pag-log sa imong code

Mahimo nimong idugang ang bag-ong mga entry sa imong mga simulation pinaagi sa pagtawag sa sangkap sa log gikan sa daghang mga macro. Buhaton nato kini sa usa ka script myfirst.cc, nga anaa kanato sa "limpyo" nga direktoryo. Hinumdomi nga among gihubit ang usa ka sangkap sa pag-log sa kini nga senaryo:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Nahibal-an nimo nga mahimo nimong mahimo ang pag-log sa tanan nga mga mensahe gikan sa kini nga sangkap pinaagi sa pag-set sa variable sa palibot sa NS_LOG sa lainlaing lebel. Magpadayon ta ug magdugang ug pipila ka entries sa script. Ang macro nga gigamit sa pagdugang sa mga mensahe sa lebel sa impormasyon sa log mao ang NS_LOG_INFO. Atong idugang ang usa ka mensahe (sa wala pa kita magsugod sa paghimo og mga node) nga nagsulti kanimo nga ang script anaa sa "Paghimo sa Topology" nga bahin. Gihimo kini sa mosunod nga code snippet,
Ablihi scratch/myfirst.cc sa imong paborito nga editor ug idugang ang linya,
NS_LOG_INFO ("Creating Topology");
atubangan sa mga linya,

NodeContainer nodes;
nodes.Create (2);

Karon i-compile ang script gamit ang waf, ug i-clear ang NS_LOG variable aron ma-disable ang logging stream nga among gipalihok sa sayo pa:

$ ./waf
$ export NS_LOG=
Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π²Ρ‹ запуститС скрипт,
$ ./waf --run scratch/myfirst

Dili nimo makita ang bag-ong mensahe tungod kay ang kaubang logging component (FirstScriptExample) wala pa ma-enable. Aron makita ang imong mensahe kinahanglan nimo nga i-enable ang logging component Pananglitan sa UnangScript nga adunay lebel nga dili ubos sa NS_LOG_INFO. Kung gusto nimo nga makita kini nga piho nga lebel sa pag-log, mahimo nimo kini nga ingon niini,

$ export NS_LOG=FirstScriptExample=info

Kung gipadagan nimo ang script karon, makakita ka usa ka bag-ong mensahe nga "Paghimo 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 Paggamit sa mga argumento sa command line

5.2.1 Pag-override sa default nga mga hiyas sa hiyas

Ang laing paagi sa pag-usab sa kinaiya sa ns-3 nga mga script nga walay pag-edit o pagtukod mao ang paggamit sa mga argumento sa command line. Naghatag kami usa ka mekanismo aron ma-parse ang mga argumento sa linya sa command ug awtomatiko nga itakda ang lokal ug global nga mga variable base sa mga resulta.

Ang unang lakang sa paggamit sa command line argument system mao ang pagdeklarar og command line parser. Sayon ra kining buhaton (sa imong main program), sama sa mosunod nga code,

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

Kining yano nga duha ka linya nga snippet kay mapuslanon kaayo sa iyang kaugalingong katungod. Giablihan niini ang pultahan sa ns-3 global variable ug attribute system. Atong idugang ang duha ka linya sa code sa sinugdanan sa main script function scratch/myfirst.cc. Sa pagpadayon, gi-compile namon ang script ug gipadagan kini, kung nagdagan naghimo kami usa ka hangyo sa tabang sama sa mosunod,

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

Kini nga sugo mangutana Waf run script scratch/myfirst ug ipasa kini nga argumento sa command line β€”PrintHelp. Ang mga marka sa kinutlo gikinahanglan aron ipakita kung unsang programa ang gituyo alang sa argumento. Ang command line parser makamatikod sa argumento β€”PrintHelp ug ipakita ang tubag,

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.

Karon atong tan-awon ang opsyon β€”PrintAttributes. Nahisgotan na namo ang ns-3 attribute system sa dihang nagtuon sa first.cc script. Nakita namon ang mosunod nga mga linya sa code,

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

ug sila miingon niana DataRate sa pagkatinuod usa ka hiyas PointToPointNetDevice. Gamiton nato ang command line argument parser aron makita ang mga attribute PointToPointNetDevice. Ang listahan sa tabang nag-ingon kung unsa ang kinahanglan natong ihatag TypeId. Kini ang ngalan sa klase diin nahisakop ang mga kinaiya sa interes. Sa among kaso kini mahitabo ns3::PointToPointNetDevice. Magpadayon kita sa unahan, mosulod,

$ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"

Ang sistema mag-imprinta sa tanan nga mga kinaiya niini nga matang sa network device. Imong makita nga lakip sa mga hiyas sa listahan mao ang,

--ns3::PointToPointNetDevice::DataRate=[32768bps]:
The default data rate for point to point links

Kini ang default nga kantidad nga gamiton sa sistema sa paghimo sa butang PointToPointNetDevice. Atong i-override kini nga default value gamit ang parameter hiyas Π² PointToPointHelper mas taas. Gamiton nato ang default values ​​para sa point-to-point nga mga device ug channel. Aron mahimo kini, atong papason ang mga tawag SetDeviceAttribute ΠΈ SetChannelAttribute gikan sa myfirst.cc, nga anaa kanato sa usa ka limpyo nga direktoryo.

Ang imong script kinahanglan nga karon ipahayag PointToPointHelper ug ayaw paghimo og bisan unsang mga operasyon sa pag-install sama sa gipakita sa panig-ingnan sa ubos,

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

Padayon ug paghimo og bag-ong script nga adunay Waf (./waff) ug balik ta ug iapil ang pipila ka entry gikan sa aplikasyon sa UDP echo server ug iapil ang prefix sa oras.

$ export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'

Kung gipadagan nimo ang script kinahanglan nimo nga makita ang mosunud nga output:

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

Hinumdomi nga sa kataposang higayon nga atong gitan-aw ang simulation time, sa higayon nga ang packet nadawat sa echo server, kini maoy 2,00369 segundos.

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

Karon nadawat niya ang pakete sa 2.25732 segundos. Kini tungod kay gi-reset lang namo ang PointToPointNetDevice data rate gikan sa lima ka megabits kada segundo ngadto sa default value, nga 32768 bits kada segundo. Kung atong ilisan ang bag-ong DataRate gamit ang command line, mahimo natong mapadali ang atong simulation pag-usab. Buhaton namo kini sama sa mosunod, sumala sa pormula nga gipasabot sa elemento sa tabang:

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

Ibalik niini ang DataRate attribute sa default value niini nga lima ka megabits kada segundo. Natingala ka ba sa resulta? Kini nahimo nga aron mabalik ang orihinal nga pamatasan sa script, kinahanglan usab namon nga itakda ang paglangan sa channel aron matugma ang katulin sa kahayag. Mahimo natong hangyoon ang command line system nga i-print ang mga attribute sa channel, sama sa atong gibuhat alang sa network device:

$ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointChannel"

Atong makita nga ang channel delay attribute kay gitakda sama sa mosunod:

--ns3::PointToPointChannel::Delay=[0ns]:
Transmission delay through the channel

Mahimo naton, pinaagi sa command line system, itakda ang duha niining mga default nga kantidad.

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

sa kini nga kaso among gipahiuli ang oras nga among nabatonan sa diha nga kami klaro nga nagbutang sa DataRate ug Delay sa 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()

Timan-i nga ang packet madawat sa server pag-usab human sa 2,00369 segundos. Mahimo namon nga itakda ang bisan unsang mga hiyas nga gigamit sa script niining paagiha. Sa partikular, mahimo natong itakda ang mga hiyas sa MaxPackets ngadto sa dili usa nga mga bili UdpEchoClient.

Unsaon nimo paggamit niini? Sulayi kini. Hinumdumi nga kinahanglan ka magkomento sa lugar kung diin among gi-override ang default nga kantidad sa hiyas ug klaro nga gitakda MaxPackets sa script. Unya kinahanglan nimong tukuron pag-usab ang script. Mahimo usab nimo gamiton ang command line aron makakuha og syntax nga tabang alang sa pagtakda sa usa ka bag-ong default attribute value. Kung masabtan nimo kini, mahimo nimong kontrolon ang gidaghanon sa mga pakete nga gipakita sa linya sa mando. Tungod kay kami mga estudyante nga mga tawo, ang among command line kinahanglan nga ingon niini:

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

Ang natural nga pangutana nga mitungha niining puntoha mao kung giunsa mahibal-an ang bahin sa paglungtad sa tanan niini nga mga hiyas. Pag-usab, ang sistema sa command line adunay usa ka function sa tabang alang niini nga butang. Kung mangayo kita og tabang sa command line, kinahanglan natong makita:

$ ./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.

Kung imong pilion ang argumento nga "PrintGroups" kinahanglan nimo nga makita ang usa ka lista sa tanan nga narehistro nga mga grupo TypeId. Ang mga ngalan sa grupo nahiuyon sa mga ngalan sa mga module sa gigikanan nga direktoryo (bisan gi-capitalize). Ang pag-imprenta sa tanan nga impormasyon sa makausa mahimong sobra ka daghan, mao nga adunay dugang nga filter aron maimprinta ang impormasyon sa grupo. Busa, pag-usab sa pag-focus sa point-to-point module:

./waf --run "scratch/myfirst --PrintGroup=PointToPoint"
TypeIds in group PointToPoint:
ns3::PointToPointChannel
ns3::PointToPointNetDevice
ns3::PointToPointRemoteChannel
ns3::PppHeader

Dinhi makit-an nimo ang magamit nga TypeId nga mga ngalan alang sa pagpangita sa mga hiyas, pananglitan sa
--PrintAttributes = ns3 :: PointToPointChannelingon sa gipakita sa ibabaw.

Ang laing paagi sa pagkat-on bahin sa mga hiyas mao ang pinaagi sa Doxygen ns‑3. Adunay usa ka panid nga naglista sa tanan nga mga hiyas nga narehistro sa simulator.

5.2.2 Pagkuha sa imong kaugalingong mga sugo

Mahimo usab nimong idugang ang imong kaugalingon nga mga kaw-it pinaagi sa command line system. Gihimo kini nga yano gamit ang command line parser method AddValue.
Gamiton nato kini nga bahin aron matino ang gidaghanon sa mga pakete nga ipakita sa lahi nga paagi. Atong idugang ang usa ka lokal nga variable nga gitawag nPackets ngadto sa usa ka function nag-unang. Atong ibutang kini sa usa aron mohaum sa atong kanhi nga default nga kinaiya. Aron tugutan ang command line parser nga usbon kini nga bili, kinahanglan natong makuha kini nga bili sa parser. Gihimo namo kini pinaagi sa pagdugang og tawag AddValue. Lakaw ug usba ang script scratch/myfirst.cc mao nga magsugod sa mosunod nga code,

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);
...

Pag-scroll paubos sa punto sa script diin among gibutang ang MaxPackets attribute ug usba kini aron kini ibutang sa nPackets variable imbes sa kanunay nga 1, sama sa gipakita sa ubos.

echoClient.SetAttribute ("MaxPackets", UintegerValue (nPackets));

Karon kung imong gipadagan ang script ug gihatag ang -PrintHelp nga argumento, kinahanglan nimo nga makita ang bag-ong argumento sa gumagamit. nalista sa display sa tabang. Pagsulod,

$ ./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

Kung gusto nimo usbon ang gidaghanon sa mga pakete nga gipasa, mahimo nimo kini pinaagi sa pagtakda sa argumento sa command line - -nPackets.

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

Karon kinahanglan nimong makita karon

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

Nakapadala ka na karon og duha ka pakete. Medyo simple, dili ba?
Imong makita nga isip usa ka ns-3 user, mahimo nimong gamiton ang command line argument system aron mamanipula ang mga global values ​​ug attributes. Kung ikaw ang tagsulat sa modelo, mahimo nimong idugang ang bag-ong mga hiyas sa imong mga butang ug kini awtomatiko nga magamit alang sa pag-configure sa imong mga tiggamit pinaagi sa sistema sa linya sa mando. Kung ikaw usa ka tagsulat sa script, mahimo nimong idugang ang mga bag-ong variable sa imong mga script ug hapsay nga i-plug kini sa imong command line system.

5.3 Paggamit sa sistema sa pagsubay

Ang tibuok nga punto sa pagmodelo mao ang pagmugna og output alang sa dugang nga pagtuon, ug ang ns-3 trace system mao ang nag-unang mekanismo niini. Tungod kay ang ns-3 usa ka C++ nga programa, ang standard nga paagi sa pagmugna og output gikan sa usa ka C++ nga programa mahimong gamiton:

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

Mahimo ka pa nga mogamit usa ka module sa pag-log aron makadugang usa ka gamay nga istruktura sa imong solusyon. Adunay daghang nahibal-an nga mga problema nga gipahinabo sa kini nga pamaagi, ug busa naghatag kami usa ka kinatibuk-ang subsystem sa pagsubay sa panghitabo aron masulbad kini nga mga problema.

Ang nag-unang tumong sa ns-3 tracing system mao ang:

  • Alang sa mga batakang buluhaton, ang sistema sa pagsubay kinahanglan nga magtugot sa tiggamit sa pagmugna og usa ka standard nga pagsubay alang sa mga sikat nga tinubdan ug pagpili sa mga butang nga makamugna sa pagsubay;

  • Ang mga intermediate nga tiggamit kinahanglan nga makahimo sa pagpalapad sa sistema sa pagsubay aron mausab ang namugna nga format sa output o sa pagsal-ot sa bag-ong mga tinubdan sa pagsubay, nga walay pag-usab sa simulator core;

  • Ang mga advanced nga tiggamit mahimo’g usbon ang simulator core aron makadugang bag-ong mga gigikanan sa pagsubay ug mga lababo. Ang sistema sa pagsubay sa ns-3 gitukod sa mga prinsipyo sa independente nga mga gigikanan sa pagsubay ug mga tigdawat, ingon man usa ka hiniusa nga mekanismo alang sa pagkonekta sa mga gigikanan sa mga konsumedor.

Ang sistema sa pagsubay sa ns-3 gitukod sa mga prinsipyo sa independente nga pagsubay sa mga gigikanan ug mga tigdawat, ingon man usa ka hiniusa nga mekanismo alang sa pagkonektar sa mga gigikanan sa mga tigdawat. Ang mga tinubdan sa pagsubay mao ang mga butang nga mahimong magsenyas sa mga panghitabo nga nahitabo sa simulation ug makahatag og access sa nagpahiping data sa interes. Pananglitan, ang usa ka tinubdan sa pagsubay mahimong magpakita kung ang usa ka aparato sa network nakadawat usa ka pakete ug gihimo ang mga sulud sa pakete nga magamit sa mga interesado nga tigdawat sa pagsubay.

Ang pagsubay sa mga tinubdan sa ilang kaugalingon walay kapuslanan gawas kon kini "giubanan" sa ubang mga bahin sa code nga aktuwal nga makahimo og usa ka butang nga mapuslanon sa impormasyon nga gihatag sa lababo. Ang mga tracer mao ang mga konsumedor sa mga panghitabo ug datos nga gihatag sa mga gigikanan sa pagsubay. Pananglitan, makahimo ka og trace sink nga (kon konektado sa trace source sa miaging pananglitan) mag-print sa mga bahin sa interes sa nadawat nga pakete.

Ang katarungan alang niining tin-aw nga pagbulag mao ang pagtugot sa mga tiggamit sa pagkonektar sa bag-ong mga tipo sa lababo ngadto sa kasamtangan nga mga tinubdan sa pagsubay nga dili kinahanglan nga i-edit ug i-compile ang simulator core. Busa sa panig-ingnan sa ibabaw, ang user mahimong maghubit sa usa ka bag-ong tracer sa ilang script ug ikonektar kini sa usa ka kasamtangan nga tinubdan sa pagsubay nga gihubit sa simulation core lamang pinaagi sa pag-edit sa user script.

Sa kini nga panudlo, atong susihon ang pipila nga gitakda nang daan nga mga gigikanan ug mga lababo ug ipakita kung giunsa kini ma-configure nga adunay labing gamay nga paningkamot sa bahin sa tiggamit. Tan-awa ang ns-3 Manual o how-to nga mga seksyon para sa impormasyon sa advanced trace configuration, lakip ang pagpalapad sa trace namespace ug paghimo og bag-ong trace source.

5.3.1 Pagsubay sa ASCII

Ang ns-3 naghatag og katabang nga gamit nga naghatag og ubos nga lebel nga sistema sa pagsubay aron matabangan ka sa mga detalye kung mag-set up sa yano nga packet traces. Kon imong palihokon kini nga bahin, imong makita ang output sa ASCII files. Para sa mga pamilyar sa ns-2 output, kini nga matang sa pagsubay susama sa gawas.tr, nga gihimo sa daghang mga script.

Magpadayon kita sa negosyo ug idugang ang pipila ka mga resulta sa pagsubay sa ASCII sa among script sa scratch/myfirst.cc. Sa wala pa ang tawag Simulator :: Run (), idugang ang mosunod nga mga linya sa code:
AsciiTraceHelper ascii;

pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("myfirst.tr"));

Sama sa daghang uban pang mga ns-3 nga mga idiom, kini nga kodigo naggamit sa usa ka butang nga katabang aron mahimo ang mga pagsubay sa ASCII. Ang ikaduhang linya adunay duha ka nested method calls. "Sa sulod" nga pamaagi PaghimoFileStream() naggamit sa anonymous object idiom sa paghimo sa usa ka file stream object sa stack (walay ngalan sa butang) ug ipasa kini sa gitawag nga pamaagi. Kita moadto sa mas lawom niini sa umaabot, apan ang tanan nga imong kinahanglan nga mahibalo sa niini nga punto mao nga ikaw sa paghimo sa usa ka butang nga nagrepresentar sa usa ka file nga gitawag akong una.tr ug ibalhin kini sa ns-3. Gisalig namo ang ns-3 sa pag-atiman sa gibuhat nga butang sa tibuok kinabuhi niini, diin kini nagsulbad sa mga problema nga gipahinabo sa gamay nga nahibal-an (tinuyo) nga limitasyon nga nalangkit sa C++ stream object copy constructors.

Panggawas nga tawag EnableAsciiAll() nagsulti sa katabang nga gusto nimong iapil ang pagsubay sa ASCII sa imong simulation alang sa tanan nga koneksyon sa point-to-point nga aparato ug gusto nimo (gipiho) nga mga tigdawat sa pagsubay nga irekord ang impormasyon sa paglihok sa pakete sa format nga ASCII.

Alang sa mga pamilyar sa ns-2, ang gisubay nga mga panghitabo katumbas sa nahibal-an nga mga tracepoint nga nagtala sa mga panghitabo nga "+", "-", "d" ug "r".
Karon mahimo nimong tukuron ang script ug ipadagan kini gikan sa linya sa mando:

$ ./waf --run scratch/myfirst

Sama sa daghang mga higayon kaniadto, makakita ka og daghang mga mensahe gikan sa Waf, ug dayon "ang 'pagtukod' malampuson nga nahuman" uban ang pipila ka mga mensahe gikan sa nagdagan nga programa.

Kung nagdagan, ang programa maghimo usa ka file nga ginganlan akong una.tr. Tungod sa kinaiya sa trabaho Waf, pinaagi sa default ang file gihimo dili sa lokal nga direktoryo, apan sa taas nga lebel nga direktoryo sa repository. Kung gusto nimo usbon ang agianan diin ang mga pagsubay gitipigan, nan mahimo nimong gamiton ang parameter nga Waf aron ipiho kini --cwd. Wala pa namo kini mahimo, mao nga aron tan-awon ang ASCII trace file myfirst.tr sa imong paborito nga editor, kinahanglan namong mag-navigate sa top-level nga direktoryo sa among repository.

Pag-parse sa mga pagsubay sa ASCII

Adunay daghang impormasyon didto sa usa ka medyo dasok nga porma, apan ang una nga butang nga kinahanglan nimong mahibal-an mao nga ang file naglangkob sa mga indibidwal nga linya. Kini mahimong klaro nga makita kung imong palapdan ang bintana sa pagtan-aw nga mas lapad.

Ang matag linya sa file katumbas sa usa ka pagsubay nga panghitabo. Niini nga kaso, among gisubay ang mga panghitabo sa transmission queue nga anaa sa matag point-to-point network device sa simulation. Ang transmission queue mao ang pila diin ang matag pakete kinahanglan nga moagi alang sa usa ka point-to-point link. Timan-i nga ang matag linya sa trace file magsugod sa usa ka karakter (ug adunay luna human niini). Kini nga simbolo adunay mosunod nga kahulogan:

+: usa ka operasyon sa pagpila ang nahitabo sa pila sa aparato;
-: usa ka operasyon sa pagkuha sa elemento nahitabo sa pila sa aparato;
d: ang pakete gihulog, kasagaran tungod kay ang pila puno;
r: Ang packet nadawat sa usa ka network device.

Atong tan-awon pag-ayo ang unang linya sa trace file. Akong gub-on kini sa mga bahin (nga adunay mga indentasyon alang sa katin-awan) ug ang numero sa linya sa wala:

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)

Ang una nga seksyon sa kini nga gipalawig nga pagsubay nga panghitabo (linya 0) mao ang operasyon. Adunay kami usa ka simbolo nga + dinhi, nga katumbas sa operasyon sa pagpila alang sa transmission. Ang ikaduha nga seksyon (linya 1) mao ang simulation time, nga gipahayag sa mga segundo. Tingali nahinumdom ka sa among gipangutana UdpEchoClientApplication magsugod sa pagpadala sa mga pakete sa duha ka segundo. Dinhi atong makita ang kumpirmasyon nga kini tinuod nga nahitabo.

Ang sunod nga seksyon sa panig-ingnan sa pagsubay (gikan sa linya 2) nagpakita kung unsang gigikanan sa pagsubay ang nagmugna niini nga panghitabo (nagpakita sa pagsubay sa namespace). Mahimo nimong hunahunaon ang trace namespace sama sa imong gusto sa filesystem namespace. Ang gamut sa namespace mao ang NodeList. Kini katumbas sa sudlanan nga gidumala sa nag-unang ns-3 code. Naglangkob kini sa tanan nga mga node nga gihimo sa script. Sama nga ang usa ka file system adunay mga direktoryo sa gamut niini, NodeList mahimo kita adunay daghang mga node. Mao nga ang linya /NodeList/0 nagtumong sa null node sa NodeList, nga kasagaran natong gihunahuna nga "node 0". Ang matag node adunay lista sa mga aparato nga na-install. Kini nga lista nahimutang sunod sa namespace. Imong makita nga kini nga trace nga panghitabo gikan DeviceList/0, nga mao ang null device nga gibutang sa node.

Sunod nga substring, $ ns3 :: PointToPointNetDevice, nagsulti kung unsang aparato ang naa sa posisyon nga zero: ang lista sa aparato sa node zero. Hinumdumi nga ang + operasyon nga nakit-an sa linya 0 nagpasabut nga usa ka elemento ang gidugang sa linya sa pagpadala sa aparato. Gipakita kini sa katapusang mga bahin sa "dalan sa track": TxQueue/Enqueue.

Ang nahabilin nga mga seksyon sa pagsubay kinahanglan nga medyo intuitive. Ang mga linya 3-4 nagpakita nga ang pakete gisulod sa usa ka point-to-point protocol. Ang mga linya 5-7 nagpakita nga ang pakete adunay IP4 version header ug naggikan sa IP address 10.1.1.1 ug gituyo alang sa 10.1.1.2. Ang mga linya 8-9 nagpakita nga kini nga pakete adunay UDP header ug sa katapusan ang linya 10 nagpakita nga ang payload mao ang gipaabot nga 1024 bytes.

Ang sunod nga linya sa trace file nagpakita nga ang parehas nga pakete gikuha gikan sa transmission queue sa parehas nga node.

Ang ikatulo nga linya sa trace file nagpakita nga ang packet nadawat sa usa ka network device sa echo server host. Gi-reproduce nako ang panghitabo sa ubos.

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)

Timan-i nga ang trace operation kay r ug ang simulation time nadugangan ngadto sa 2,25732 seconds. Kung gisunod nimo pag-ayo ang tutorial, kini nagpasabut nga imong gibiyaan ang DataRate ug Link Delay sa mga aparato sa network sa ilang mga default nga kantidad. Kini nga tense kinahanglan nga pamilyar, sama sa imong nakita sa miaging seksyon.

Ang trace source namespace entry (linya 2) giusab aron ipakita nga kini nga panghitabo naggikan sa node 1 (/NodeList/1) ug ang packet madawat sa trace source (/MacRx). Kinahanglan nga sayon ​​​​ra alang kanimo ang pagsunod sa paglihok sa pakete pinaagi sa topology pinaagi sa pagtan-aw sa nahabilin nga mga pagsubay sa file.

5.3.2 Pagsubay sa PCAP

Ang ns-3 Device Helpers mahimo usab nga gamiton sa paghimo og mga trace files sa .pcap format. Acronym pcap (kasagaran gisulat sa gamay nga letra) nagpasabot sa packet capture ug sa pagkatinuod usa ka API nga naglakip sa pagpasabot sa .pcap file format. Ang labing popular nga programa nga makabasa ug makapakita niini nga format mao ang Wireshark (gitawag kaniadto Ethereal). Bisan pa, adunay daghang mga analista sa pagsubay sa trapiko nga naggamit niini nga format sa pakete. Among giawhag ang mga tiggamit sa paggamit sa daghang mga himan nga anaa sa pag-analisar sa pcap traces. Sa kini nga panudlo magpunting kami sa pagtan-aw sa mga pagsubay sa pcap gamit tcpdump.

Ang pagpaandar sa pcap tracing gihimo gamit ang usa ka linya sa code.

pointToPoint.EnablePcapAll ("myfirst");

Idikit kini nga linya sa code pagkahuman sa ASCII trace code nga among gidugang scratch/myfirst.cc. Timan-i nga gipasa lang namo ang string nga "myfirst", dili "myfirst.pcap" o bisan unsa nga susama. Kini tungod kay ang parameter usa ka prefix, dili usa ka bug-os nga filename. Atol sa simulation, ang katabang sa tinuud maghimo usa ka pagsubay nga file alang sa matag point-to-point nga aparato. Ang mga ngalan sa file pagatukuron gamit ang prefix, node number, device number, ug suffix ".pcap".

Alang sa among pananglitan nga script, makita namon ang mga file nga ginganlag "myfirst-0-0.pcap"Ug"myfirst-1-0.pcap", nga pcap traces para sa node 0-device 0 ug node 1-device 0 matag usa. Kung nadugang nimo ang linya sa code aron mahimo ang pagsubay sa pcap, mahimo nimong ipadagan ang script sa naandan nga paagi:

$ ./waf --run scratch/myfirst

Kung imong tan-awon ang taas nga lebel nga direktoryo sa imong pag-apod-apod, kinahanglan nimo nga makita ang tulo nga mga file: usa ka ASCII trace file akong una.tr, nga among gitun-an kaniadto, mga file myfirst-0-0.pcap ΠΈ myfirst-1-0.pcap - bag-ong pcap files nga bag-o lang namo namugna.

Pagbasa sa output gamit ang tcpdump

Sa pagkakaron, ang pinakasayon ​​nga paagi sa pagtan-aw sa pcap files mao ang paggamit sa 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

Sa basurahan myfirst-0-0.pcap (kliyente device) imong makita ang echo packet gipadala human sa 2 segundos sa simulation. Kung imong tan-awon ang ikaduhang dump (myfirst-1-0.pcap), imong makita nga ang packet nadawat sa 2,257324 segundos. Imong makita sa ikaduhang dump nga ang packet gibalik sa 2.257324 segundos, ug sa kataposan nga ang packet nadawat balik sa kliyente sa unang dump sa 2.514648 segundos.

Pagbasa Output uban sa Wireshark

Kung dili ka pamilyar sa Wireshark, adunay usa ka website diin mahimo nimong i-download ang mga programa ug dokumentasyon: http://www.wireshark.org/. Wireshark mao ang usa ka GUI nga mahimong gamiton sa pagpakita niini nga mga pagsubay nga mga file. Kung ikaw adunay Wireshark, mahimo nimong ablihan ang bisan unsang mga pagsubay sa mga file ug ipakita ang mga sulud ingon nga nakuha nimo ang mga pakete gamit ang usa ka packet sniffer.

Source: www.habr.com

Idugang sa usa ka comment