
4 Kontseptsiooni ĂŒlevaade
4.1 Peamised abstraktsioonid
4.1.1 Node (SÔlm)
4.1.2 Application (Rakendus)
4.1.3 Channel (Kanal)
4.1.4 Net Device (VÔrku seadmed)
4.1.5 Topoloogilised abivahendid
4.2 Esimene skript ns-3
4.2.1 Boilerplate kood
4.2.2 Ăhendatavad moodulid
4.2.3 Nimi ruum ns3
4.2.4 Logimine
4.2.5 Peamine funktsioon
4.2.6 Topoloogiliste abivahendite kasutamine
4.2.7 Rakenduse kasutamine
4.2.8 Simulaator
4.2.9 Teie stsenaariumi koostamine
4.3 ns-3 Allikakood
PeatĂŒkk 4
Kontseptsiooni ĂŒlevaade
Esimene asi, mida me peame tegema enne, kui hakkame uurima vĂ”i kirjutama koodi ns-3, on selgitada mĂ”ned pĂ”hikontseptsioonid ja abstraktsioonid sĂŒsteemis. Paljuski vĂ”ib see mĂ”nedele tunduda ilmne, kuid soovitame seda jaotist lugeda, et veenduda, et alustate tugeva aluse pealt.
4.1 Peamised abstraktsioonid
Sel jaotisel vaatame ĂŒle mĂ”ned terminid, mida tavaliselt kasutatakse vĂ”rgus, kuid millel on ns-3 kontekstis spetsiifiline tĂ€hendus.
4.1.1 Node (SÔlm)
Interneti slĂ€ngis nimetatakse arvutit, mis on ĂŒhendatud vĂ”rku, hostiks vĂ”i mĂ”nikord lĂ”pp-sĂŒsteemiks. Kuna ns-3 on vĂ”rgusimulaator, mitte Interneti simulaator, ei kasuta me teadlikult terminit host, kuna see on tihedalt seotud Interneti ja selle protokollidega. Selle asemel kasutame ĂŒldisemat terminit, mida kasutavad ka teised simulaatorid ja mis tuleneb graafiteooriast â sĂ”lm.node).
Ns-3-s on arvutiseadme pÔhialum on sÔlm. Seda aluseid esindab C++ klass Node. Klass NodeNode sÔlm (Node) pakub meetodeid arvutiseadmete esitlemiseks simuleerimistes.
Te peate mÔistma SÔlm kuidas arvuti, kuhu lisate funktsionaalsust, töötab. Lisate selliseid asju nagu rakendused, protokollide koondud ja riistvarakaardid koos draiveritega, mis vÔimaldavad arvutil teha kasulikku tööd. Me kasutame ns-3-s sama pÔhistruktuuri.
4.1.2 Application (Rakendus)
Tavaliselt jaotatakse arvutitarkvara kaheks laiemaks klassiks. SĂŒsteemitarkvara korraldab erinevaid arvutiressursse, nagu mĂ€lu, protsessoritsĂŒklid, kĂ”vaketas, vĂ”rk jne, teatud arvutusmudeli kohaselt. SĂŒsteemitarkvara ei kasuta neid ressursse otse kasutajale kasu toovate ĂŒlesannete tĂ€itmiseks. Kasutaja kĂ€ivitab tavaliselt rakenduse, et saavutada kindel eesmĂ€rk, mis omakorda saab ja kasutab ressursse, mida haldab sĂŒsteemitarkvara.
Tihti tĂ”mmatakse sĂŒsteemi ja rakendustarkvara vahele piir, kui toimub privileegitaseme muutus, mis esineb operatsioonisĂŒsteemi murede korral. nsâ3-s ei ole tegelikult operatsioonisĂŒsteemi kontseptsiooni ja seega ka privileegitasemeid vĂ”i sĂŒsteemikĂ”nesid. Meil on, siiski, rakenduse idee. Nagu «reaalses maailmas», töötavad tarkenduse rakendused arvutites ĂŒlesannete tĂ€itmiseks, nii töötavad nsâ3 rakendused nsâ3 sĂ”lmedes simuleeritud maailmas simuleerimise juhtimiseks.
ns-3-s on sĂŒsteemi pĂ”histruktuuri abstraktsioon, mis genereerib teatud tegevuse simuleerimiseks; see on rakendus. See abstraktsioon on C++ klassi Application (rakendus) kaudu esindatud. Klass Application pakub meetodeid meie kasutaja taseme rakenduste esitlemiseks simuleerimistes. Arendajatelt oodatakse, et nad spetsialiseerivad klassi Application objekt-orienteeritud programmeerimise mĂ”ttes, et luua uusi rakendusi. Selles juhendis kasutame klassi Application spetsialiseerimisi, mida nimetatakse UdpEchoClientApplication ja UdpEchoServerApplication. Nagu oodata oli, koosnevad need rakendused klient/server rakenduste kogumist, mida kasutatakse vĂ”rgupakettide genereerimiseks ja kaja-simulaatsiooniks.
4.1.3 Channel (Kanal)
Reaalses maailmas saab arvuti vĂ”rku ĂŒhendada. Tihti nimetatakse andmete edastamiseks kasutatavaid keskkondi kanaliteks. Kui ĂŒhendate Etherneti kaabli seinakontakti, ĂŒhendate arvuti Etherneti suhtluskanaliga. Simuleeritud maailmas ns-3 on sĂ”lm ĂŒhendatud objekti kĂŒlge, mis esindab suhtluskanalit. Siin on suhtlusalase alamsĂŒsteemi peamine abstraktsioon kanal ning see on esitatud C++ klassiga Channel (kanal).
Klass ChannelChannel pakub meetodeid alamsĂŒsteemi objektide koostoime haldamiseks ja nendele sĂ”lmede ĂŒhendamiseks. Kanaleid saavad arendajad ka objekti-orienteritud programmeerimise kontekstis spetsialiseerida. Kanali spetsialiseerumine vĂ”ib mudeldada midagi nii lihtsat nagu kaabel. Spetsialiseeritud kanal vĂ”ib mudeldada ka keerulisemaid objekte, nĂ€iteks suurt Etherneti lĂŒlitit vĂ”i kolmemÔÔtmelist ruumi, mis on tĂ€is takistusi juhtmevabadest vĂ”rkudest.
Kasutame kÀesolevas juhendis spetsialiseeritud versioone kanalist, mida nimetatakse CsmaChannelCsmaChannel, PointToPointChannelPointToPointChannel ja WifiChannelWifiChannel. CsmaChannel, nÀiteks simuleerib suhtlusvÔrgu versiooni, mis rakendab mitme juurdepÀÀsu kommunikatsioonikeskkonda kande juhtimisega. See annab meile Etherneti sarnased funktsioonid.
4.1.4 Net Device (VÔrku seadmed)
Varem oli nii, et kui soovite arvutit vĂ”rku ĂŒhendada, pidite ostma teatud vĂ”rgukaabli ja riistvara seadme, mida nimetatakse (PC terminoloogias) perifeeriakaardiks, mille peate arvutisse paigaldama. Kui perifeeriakaardil on teatud vĂ”rgufunktsioonid, nimetatakse neid vĂ”rgu liidesekaardiks vĂ”i vĂ”rgu kaartideks. TĂ€napĂ€eval tarnitakse enamiku arvutite korral koos integreeritud vĂ”rgu liidese riistvaraga ja kasutajad ei kĂ€sitle neid eraldi seadmetena.
VÔrgukaart ei tööta ilma draiverprogrammi, mis juhib tema riistvara. Unixis (vÔi Linuxis) klassifitseeritakse osa perifeerseid seadmeid seadmetena. Seadmeid hallatakse seadme draiverite (device drivers) abil, samas kui vÔrgu seadmeid (NIC) hallatakse vÔrgu seadme draiverite (network device drivers) ja sisaldavad kogunime "vÔrguseadmestik" (vÔrguseadmestik). Unixis ja Linuxis pöördute vÔrgu seadmete poole selliste nimede kaudu nagu nÀiteks eth0.
ns-3s vĂ”rgu seadme abstraktsioon katab nii tarkvarajuhendi kui ka simuleeritud riistvara. Simulatsiooni ajal on vĂ”rgu seade 'paigaldatud' sĂ”lmele, et vĂ”imaldada sellel teistega kanalite kaudu suhelda. Nagu reaalne arvuti, vĂ”ib sĂ”lm olla ĂŒhendatud mitme kanaliga erinevate seadmete kaudu. NetDevices.
VĂ”rgu seadme abstraktsioon on esindatud C++ klassiga NetDevice. Klass NetDevice pakub meetodeid ĂŒhenduste haldamiseks Node'i ja Channel'i objektidega; ning neid vĂ”ivad arendajad spetsialiseerida objektorienteeritud programmeerimise kontekstis. Selles juhendis kasutame mitmeid spetsialiseeritud versioone NetDevice'ist, mille nimed on CsmaNetDevice, PointToPointNetDevice ja WifiNetDevice. Nii nagu Etherneti vĂ”rkaadapter on mĂ”eldud töötama Ethernet, CsmaNetDevice töötamiseks CsmaChannel, PointToPointNetDevice töötamiseks PointToPointChannel, ja WifiNetDevice â mĂ”eldud töötama WifiChannel.
4.1.5 Topoloogilised abivahendid
Reaalsetes vĂ”rkudes leiate host-arvuteid, millel on lisatud (vĂ”i integreeritud) vĂ”rkaartid. ns-3-s ĂŒtleksime, et nĂ€ete sĂ”lmi, millel on ĂŒhendatud NetDevices. Suures simuleeritud vĂ”rgus peate korraldama ĂŒhendused paljude objektide vahel. SĂ”lm, NetDevice ja Kanal.
Kuna NetDevices'i ĂŒhendamine sĂ”lmedega, NetDevices'i ĂŒhendamine kanalitega, IP-aadresside mÀÀramine jne ns-3-s on tavaline ĂŒlesanne, et seda vĂ”imalikult lihtsaks teha, pakume nn topoloogilisi abivahendeid. NĂ€iteks NetDevice'i loomiseks on vaja lĂ€bi viia palju ns-3 tuuma operatsioone: lisada MAC-aadress, seadistada see seadme Node sisse, seadistada sĂ”lme protokolli virna ning seejĂ€rel ĂŒhendada NetDevice Channeliga. Veel rohkem operatsioone on vajalik, et ĂŒhendada mitu seadet mitme punktiga kanalitega ja seejĂ€rel ĂŒhendada eraldi vĂ”rgud ĂŒhtseks vĂ”rguks (Internetworks). Pakume abivahendeid topoloogia, mis teie mugavuse huvides ĂŒhendab need arvukad operatsioonid lihtsasti kasutatavasse mudelisse.
4.2 Esimene skript ns-3
Kui olete sĂŒsteemi installinud, nagu eespool soovitatud, leidub teil nsâ3 versioon kaustas nimega repos teie kodukaustas. Liikuge kausta release
Kui teil sellist kausta ei ole, siis te ei mÀÀranud nsâ3 versiooni koostamisel vĂ€ljundikausta, koostage see jĂ€rgmiselt:
$ ./waf configure --build-profile=release --out=build/release,
$ ./waf build
seal peaksite nÀgema kausta struktuuri, mis sarnaneb jÀrgmisele:
AUTHORS examples scratch utils waf.bat*
bindings LICENSE src utils.py waf-tools
build ns3 test.py* utils.pyc wscript
CHANGES.html README testpy-output VERSION wutils.py
doc RELEASE_NOTES testpy.supp waf* wutils.pycLiikuge kausta examples/tutorial. Seal peaksite nĂ€gema faili nimega first.cc. See on skript, mis loob lihtsa punkt-punkt ĂŒhenduse kahe sĂ”lme vahel ja edastab ĂŒhe paketi sĂ”lmede vahel. Vaatame seda skripti rida-realt, selleks avame first.cc oma lemmikredaktoris.
4.2.1 Boilerplate kood
Faili esimene rida on redigeerimistĂŒĂŒp emacs. See ĂŒtleb emacsile vormindamistingimustest (koodistiil), mida kasutame oma lĂ€htekoodis.
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */See alati ĂŒsna vaieldav kĂŒsimus, seega peame selgust tooma, et seda kohe kĂ”rvaldada. Projekt ns-3, nagu enamus suuri projekte, on vĂ”tnud kasutusele kodeerimise stiili, millega kogu esitatud kood peab vastama. Kui soovite oma koodi projekti lisada, peate lĂ”puks jĂ€rgima ns-3 kodeerimisstandardit, nagu on kirjeldatud failis doc/codingstd.txt vĂ”i nĂ€idatud projekti veebilehel: .
Soovitame teil harjuda ns-3 koodi vĂ€ljanĂ€gemisega ja rakendada seda standardit iga kord, kui töötate meie koodiga. Kogu arendajate meeskond ja panustajad nĂ”ustusid selle ĂŒle pĂ€rast teatud nurinat. Ălaltoodud emacs'i reĆŸiimi rida lihtsustab korrektset vormindamist, kui kasutate emacs'i redigeerijat.
Simulaator ns-3 on litsentseeritud kasutades GNU ĂŒldise avaliku litsentsi. NĂ€ete iga ns-3 levitamise faili juures vastavat juriidilist GNU pealkirja. Sageli vĂ”ite nĂ€ha ĂŒhte autorikaitse teatist ns-3 projektis osalevate asutuste kohta GPL-i teksti ja autori kohal, nagu allpool nĂ€idatud.
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/4.2.2 Ăhendatavad moodulid
Kood algab rida kaasamisoperatoorega (include).
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"Kuna soovime aidata meie kĂ”rgema taseme skriptide kasutajaid sĂŒsteemis oleva suure hulga pĂ€isefailidega toime tulla, grupeerime need vastavalt nende kasutamisele suuremates moodulites. Pakume ĂŒhte pĂ€isefaili, mis laadib rekurssiivselt kĂ”ik selles moodulis kasutatavad pĂ€isefailid. Selle asemel, et otsida, milline pĂ€is vajalik on, ja vĂ”ib-olla Ă”igete sĂ”ltuvuste loendit saada, anname teile vĂ”imaluse laadida rĂŒhm faile suure detailitunne. See ei ole kĂ”ige tĂ”husam lĂ€henemine, kuid see muudab skriptide kirjutamise kindlasti lihtsamaks.
Iga kaasatud nsâ3 fail paigutatakse kaustasse nimega ns3 (ehituskaust), et vĂ€ltida failinimede konflikte ehitusprotsessi ajal. Fail ns3/core-module.h vastab nsâ3 moodulile, mille leiate kaustast src/core teie installitud versioonis. Selle kausta loendist leiate suure hulga pĂ€isefailide. Kui teete ehituse, Waf paigutab avalikke pealkirjafailid kausta ns3 alamkausta build/debug
Kui teil sellist kausta ei ole, siis te ei mÀÀranud nsâ3 versiooni koostamisel vĂ€ljundikausta, koostage see jĂ€rgmiselt:
$ ./waf configure âbuild-profile=debug âout=build/debug
$ ./waf build
vÔi
$ ./waf configure âbuild-profile=optimized âout=build/optimized
$ ./waf build
vÔi build/optimized, sÔltuvalt teie konfiguratsioonist. Waf genereerib automaatselt ka mooduli include-faili, et laadida kÔiki avalikke pealkirjafailid. Kuna te jÀrgite seda juhendit, olete te juba teinud
$ ./waf -d debug --enable-examples --enable-tests configureet seadistada projekt debug-kogude tegemiseks, mis sisaldavad nÀiteid ja teste. Te olete ka teinud
$ ./wafet koguda projekti. Nii et nĂŒĂŒd, kui vaatate kausta ../..//build/debug/ns3, leiate seal, muuhulgas, eelmises nĂ€idatud nelja mooduli pealkirjafailid. Te vĂ”ite vaadata nende failide sisu ja leida, et nad sisaldavad kĂ”iki avalikke faile, mida vastavad moodulid kasutavad.
4.2.3 Nimi ruum ns3
JĂ€rgmine rida skripti first.cc on nimede ruumi deklareering.
using namespace ns3;nsâ3 projekt on realiseeritud C++ nimiruumis, mida nimetatakse ns3. See rĂŒhmitab kĂ”ik nsâ3 seotud kuulutused globaalsetest nimiruumidest vĂ€ljapoole, mis loodetavasti aitab integreerimisel muu koodiga. C++ operaatori kasutamine toob nimiruumi nsâ3 praegusesse (globaalsesse) deklaratiivses piirkonda. See on veidi keeruline viis öelda, et pĂ€rast seda kuulutust ei pea te enam sisestama operaatorit ns3 :: scope enne kogu nsâ3 koodi, et seda kasutada. Kui te ei ole nimiruumidega tuttav, konsulteerige peaaegu iga C++ Ă”pikuga ja vĂ”rrelge nimiruumi ns3 std nimiruumi ja kuulutustega. using namespace std; nĂ€idisnĂ€idetes vĂ€ljundoperaatori kasutamisel cout ja voogud.
4.2.4 Logimine
JĂ€rgmine skriptirida on selline,
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");Kasutame seda vĂ€idet mugava kohana meie dokumenteerimissĂŒsteemi aruteluks. Doxygen. Kui vaatate ns-3 projekti veebilehte, leiate navigeerimisribal lingi "Dokumentatsioon". Kui valite selle lingi, jĂ”uate meie dokumentatsiooni lehele. Seal on link "Viimane versioon", mis viib teid ns-3 viimase stabiilse versiooni dokumentatsiooni juurde. Kui valite lingi "API Dokumentatsioon", jĂ”uate ns-3 API dokumentatsiooni lehele.
Lehe vasakul kĂŒljel leiate dokumentatsiooni struktuuri graafilise esitluse. Hea koht alustamiseks on "raamat" ns-3 moodulites navigeerimise puus. Kui avate Moodulid, nĂ€ete ns-3 moodulite dokumentatsiooni nimekirja. Nagu eelnevalt arutatud, on mooduli kontseptsioon siin otseselt seotud moodulisse kuuluvate failidega. ns-3 logimisalajuhendit kĂ€sitletakse jaotisest Logimisalajuhendi kasutamine, seega naaseme selle juurde hiljem selles juhendis, kuid saate rÀÀkida eelnevas vĂ€ites, vaadates moodulit PĂ”hi, seejĂ€rel avades raamatu Siluri tööriistad, ja seejĂ€rel valides lehe Logging. KlĂ”psake Logging.
NĂŒĂŒd peate vaatama dokumentatsiooni Doxygen mooduli jaoks Logging. LehekĂŒlje ĂŒlemises osas loetletud makrosid leiate NS_LOG_COMPONENT_DEFINE kirje. Enne lingile minemist vaadake kindlasti logimismooduli "TĂ€pne kirjeldus" lĂ€bi, et mĂ”ista selle toimimist tervikuna. Selleks vĂ”ite kerida alla vĂ”i valida "Rohkem..." diagrammi all.
Kui teil on ĂŒldine arusaam, mis toimub, jĂ€tkake ja vaadake konkreetse NS_LOG_COMPONENT_DEFINE dokumentatsiooni. Ma ei hakka siin dokumentatsiooni uuesti esitama, kuid kokkuvĂ”tteks ĂŒtlen, et see rida kuulutab vĂ€lja logimise komponendi nimega FirstScriptExample, mis vĂ”imaldab sisse ja vĂ€lja lĂŒlitada konsooli logimise sĂ”numeid nime alusel.
4.2.5 Peamine funktsioon
JÀrgmistes ridade skripti nÀete,
int
main (int argc, char *argv[])
{ See on lihtsalt teie programmi (skripti) pÔhifunktsiooni deklareerimine. Nagu iga C++ programmis, peate mÀÀratlema pea funktsiooni, mis kÀivitub esimesena. Siin ei ole midagi erilist. Teie ns-3 skript on lihtsalt C++ programm. JÀrgmine rida seab ajataseme 1 nanosekundiks, mis on vaikevÀÀrtus:
Time::SetResolution (Time::NS);Ajaotus ajas vĂ”i lihtsalt ajaajaotus on kĂ”ige vĂ€iksem ajavahemik, mida saab kasutada (kĂ”ige vĂ€iksem esindatav erinevus kahe ajandme vahel). Saate muuta ajaajaotust tĂ€pselt ĂŒks kord. See paindlikkust pakkuv mehhanism kasutab mĂ€lu, seega, kui ajaajaotus on mÀÀratud, vabastame mĂ€lu, et vĂ€ltida edasisi uuendusi. (Kui te ei mÀÀra aegajaotust selgelt, on see ĂŒhele nanosekundile, ja mĂ€lu vabastatakse simulatsiooni alustamisel.)
JĂ€rgmisi kahte skriptiliini kasutatakse kahe ajalugu pidamise komponendi sisselĂŒlitamiseks, mis on rakendustesse sisse ehitatud EchoClient ja EchoServer:
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);Kui olete lugenud Logimise komponendi dokumentatsiooni, nĂ€ete, et on olemas mitmeid logimise ĂŒksikasjalikkuse tasemeid, mida saate iga komponendi puhul aktiveerida. Need kaks koodirida saadavad silumislogi taset INFO echo klientidele ja serveritele. Sellel tasemel prindib rakendus simulatsiooni ajal sĂ”numeid pakettide saatmise ja vastuvĂ”tmise ajal.
NĂŒĂŒd lĂ€heme otse asjade juurde, luues topoloogiat ja kĂ€ivitades simuleerimise. Kasutame topoloogiaalaste abivahendite objekte, et see töö vĂ”imalikult lihtsaks muuta.
4.2.6 Topoloogiliste abivahendite kasutamine
JĂ€rgmised kaks koodirida meie skriptis loovad tegelikult ns-3 Node objekte, mis esindavad arvuteid simulatsioonis.
NodeContainer nodes;
nodes.Create (2);Enne kui jĂ€tkame, otsime vĂ€lja dokumentatsiooni klassi NodeContainer. Teine vĂ”imalus selle klassi dokumentatsiooni leidmiseks on vahekaart Classes lehekĂŒlgedel. Doxygen. Kui Doxygen on juba avatud, liikuge lihtsalt lehe ĂŒlaossa ja valige vahekaart Klassen. Peaksite nĂ€gema uut vahekaartide komplekti, millest ĂŒks on klasside nimekiri. Selle vahekaardi all nĂ€ete kĂ”iki ns-3 klasse. Kerige allapoole, kuni ns3 :: NodeContainer. Kui leiate klassi, valige see, et minna klassi dokumentatsiooni.
Kuidas me mĂ€letame, on ĂŒks meie peamisi abstraktsioone sĂ”lm. See esindab arvutit, kuhu plaanime lisada selliseid asju nagu protokollide tĂŒkid, rakendused ja perifeersed kaardid. Topoloogiaalane abiline NodeContainer pakub mugavat viisi mis tahes objektide loomiseks, haldamiseks ja juurdepÀÀsuks SĂ”lm, mille me loome simuleerimise kĂ€ivitamiseks. Ălaltoodud esimene rida kuulutab lihtsalt vĂ€lja NodeContainer, mida me nimetame nodes. Teine rida kutsub metod Create esile objekti nodes jaoks ja palub konteineril luua kaks sĂ”lme. Nagu on kirjeldatud Doxygen, kĂŒsib konteiner ns-3 sĂŒsteemilt kahe objekti loomist SĂ”lm ja salvestab nĂ€idikud nende objektide kohta endasse.
Skripti abil loodud sĂ”lmed ei tee praegu midagi. JĂ€rgmine samm topoloogia loomisel on meie sĂ”lmede ĂŒhendamine vĂ”rku. KĂ”ige lihtsam vĂ”rguvorm, mida toetame, on kahe sĂ”lme vaheline otsekontakt. Loome nĂŒĂŒd sellise ĂŒhenduse.
PointToPointHelper
Loodame kahekordset ĂŒhendust, jĂ€rgides tuttavat mustrit, kasutades topoloogilist abivahendit nĂ”rgema tasandi tööde teostamiseks, mis on vajalik ĂŒhendamiseks. Meenutame, et meie kaks peamist abstraktsiooni NetDevice ja Kanal. Reaalses maailmas vastavad need terminid enam-vĂ€hem perifeersete kaartide ja vĂ”rgukaablite tĂ€hendusele. Ăldiselt on need kaks asja tihedalt seotud ja keegi ei saa loota vahetusele, nĂ€iteks seadmete Ethernet ilma juhtmeta ĂŒhenduse kaudu. Meie topoloogilised abivahendid jĂ€rgivad seda tihedat seost ja seetĂ”ttu kasutatakse selles stsenaariumis ĂŒhte objekti PointToPointHelper ns-3 objektide seadistamiseks ja ĂŒhendamiseks PointToPointNetDevice ja PointToPointChannel. JĂ€rgmised kolm rida stsenaariumis:
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));Esimene rida,
PointToPointHelper pointToPoint;loob pöörde abil objekti eksemplari PointToPointHelper. Ăldiselt vastab jĂ€rgmine rida
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));ĂŒtleb objektile PointToPointHelper kasutada vÀÀrtust â5 Mbit/sâ (viis megabitti sekundis) kui âDataRate».
Spetsiifilisemast vaatenurgast vastab rida âDataRateâ sellele, mida me nimetame atribuudi PointToPointNetDevice. Kui vaatate Doxygen klassile ns3::PointToPointNetDevice ja meetodi dokumentatsioonis GetTypeId leiate seadme jaoks mÀÀratud atribuutide nimekirja. Nende seas on atribuut âDataRateâ. Enamik kasutajale nĂ€htavaid nsâ3 objekte sisaldab sarnaseid atribuutide loendeid. Kasutame seda mehhanismi simuleerimise lihtsaks kohandamiseks ilma ĂŒmberkompileerimiseta, nagu nĂ€ete jĂ€rgmisest osast.
Sarnaselt âDataRateâ PointToPointNetDevice'is leiate atribuudi âDelayâ, mis on seotud PointToPointChannel'iga. LĂ”ppvĂ€li,
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));ĂŒtleb PointToPointHelper kasutada vÀÀrtust â2 msâ (kaks millisekundit) levimisviivituse vÀÀrtusena kanalil, mille ta hiljem loob.
NetDeviceContainer
Praeguseks on meie stsenaariumis NodeContainer, mis sisaldab kahte sĂ”lme. Meil on PointToPointHelper, mis on ette valmistatud objektide loomiseks PointToPointNetDevices ja ĂŒhendame need objektiga PointToPointChannel. Nagu me kasutasime sĂ”lmede loomisel abiobjekti topoloogiast NodeContainer, palume PointToPointHelper teha meie nimel töö, mis seondub seadmete loomise, seadistamise ja paigaldamisega. Me vajame nimekirja kĂ”igist loodud objektidest NetDevice, seega kasutame NetDeviceContainer nende salvestamiseks, nagu me kasutasime NodeContainer meie loodud sĂ”lmede salvestamiseks. JĂ€rgmised kaks koodirida,
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);lĂ”petavad seadmete ja kanali seadistamise. Esimene rida kuulutab vĂ€lja eespool mainitud seadme konteineri, samas kui teine teeb peamise töö. Meetod Installeerida objekti PointToPointHelper vastu vĂ”tma NodeContainer nagu parameeter. Siseriides NetDeviceContainer iga sĂ”lme jaoks, mis asub NodeContainer loomiseks (punkt-punkt ĂŒhenduseks peab neid olema tĂ€pselt kaks) PointToPointNetDevice loodud ja salvestatud seadmete konteineris. PointToPointChannel loodud ja sellele on ĂŒhendatud kaks PointToPointNetDevices. PĂ€rast objektide loomist kasutatakse atribuute, mis olid PointToPointHelper, vastava atribuutide initsialiseerimiseks loodud objektides.
PĂ€rast kutsumist pointToPoint.Install (nodes) Meil on kaks sĂ”lmpunkti, kummagi kĂ€es punkt-punkt seadmega ja ĂŒks punkt-punkt kanal nende vahel. MĂ”lemad seadmed on konfigureeritud edastama andmeid kiirusel viis megabit sekundis ja edasiande latentsus kanalil on kaks millisekundit.
InternetStackHelper
NĂŒĂŒd on meil sĂ”lmpunktid ja seadmed seadistatud, kuid meie sĂ”lmpunktides ei ole protokolli steke. JĂ€rgmised kaks rida koodi hoolitsevad selle eest.
InternetStackHelper stack;
stack.Install (nodes);InternetStackHelper on topoloogiline abiline Interneti stekide jaoks, sarnane PointToPointHelper'ile punkt-punkt seadmete jaoks. Meetod Installeerida vÔtab parameetrina NodeContainer'i. Selle tÀitmisel seadistab see Interneti steki (TCP, UDP, IP jne) igas konteineri sÔlmpunktis.
Ipv4AddressHelper
JÀrgmiseks peame seadmed siduma IP-aadressidega. Pakume topoloogiat aitab IP-aadresside jaotuse haldamiseks. Ainus kasutajale nÀhtav API on pÔhja IP-aadressi ja alamvÔrgu maske seadmine, mida kasutatakse tegelikul aadresside jaotusel (see toimub abi sisemises madalamal tasemel). JÀrgmised kaks rida koodi meie skriptinÀites first.cc,
Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");deklareerivad aadressi abieksemplari ja ĂŒtlevad, et see peab hakkama jagama IP-aadresse vĂ”rgust 10.1.1.0, kasutades mÀÀramiseks bitimaski 255.255.255.0. Vaikimisi alustavad jaotatud aadressid numbrist ĂŒks ja suurenevad monotoonselt, seega esimene aadress, mis sellest baasist jaotatakse, on 10.1.1.1, seejĂ€rel 10.1.1.2 jne. Tegelikult, madalamal tasemel salvestab sĂŒsteem ns-3 kĂ”ik jaotatud IP-aadressid ja genereerib fataalse vea, kui te suvaliselt loote olukorra, kus sama aadress genereeritakse kaks korda (ĂŒhtlasi on seda viga raske siluda).
JĂ€rgmine koodirida,
Ipv4InterfaceContainer interfaces = address.Assign (devices);tĂ€idab aadressi tegelikku mÀÀramist. nsâ3-s loome me IP-aadressi ja seadme vaheline seos, kasutades objekti Ipv4Interface. Nii nagu meil on mĂ”nikord vaja loetelu vĂ”rguseadmetest, mille on loonud abistaja edasiseks kasutamiseks, on meil mĂ”nikord vaja ka objektide loetelu Ipv4Interface. Ipv4InterfaceContainer pakub seda funktsionaalsust.
Oleme ehitanud punkt-punkti vĂ”rgu, millel on seadistatud protokollid ja mÀÀratud IP-aadressid. NĂŒĂŒd vajame igas sĂ”lmes rakendust, et genereerida liiklust.
4.2.7 Rakenduse kasutamine
Veel ĂŒks peamine abstraktsioon sĂŒsteemis nsâ3 on Application (rakendus). Selles stsenaariumis kasutame kahte pĂ”hiklassi spetsiifilist versiooni Application nsâ3-st, mis kannab nime UdpEchoServerApplication ja UdpEchoClientApplication. Nagu ka eelnevatel kordadel, kasutame pĂ”hielementide seadistamiseks ja haldamiseks abistavaid objekte. Siin kasutame UdpEchoServerHelper ja UdpEchoClientHelperobjekte, et muuta meie elu lihtsamaks.
UdpEchoServerHelper
JĂ€rgmised koodiread meie esimeses skriptis first.cc kasutatakse UDP eko serveri rakenduse seadistamiseks ĂŒhes varasemalt loodud sĂ”lmes.
UdpEchoServerHelper echoServer (9);
ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));Esimene koodirida ĂŒlaltoodud lĂ”igus loob UdpEchoServerHelper. Nagu ikka, ei ole see iseseisev rakendus, vaid objekt, mis aitab meil luua reaalset rakendust. Ăks meie kokkulepetest on edastada vajalikud atribuudid abiojekti konstruktorile. Antud juhul ei saa abiesaaja midagi kasulikku teha, kui tal ei ole teada sadama numbrit, millel server ootab pakette; see number peab olema tuntud ka kliendile. Sellisel juhul edastame abiojekti konstruktorile sadama numbri. Konstruktor omakorda lihtsalt tĂ€idab SetAttribute edastatud vÀÀrtusega. Hiljem, kui soovite, saate SetAttribute abil seada muu atribuudivÀÀrtuse 'Sadama'.
Sarnaselt paljudele teistele abiojekti objektidele on objekt UdpEchoServerHelper meetod Installeerida. Selle meetodi tÀitmine loob tegelikult pÔhielektrooni rakenduse ja sidub selle sÔlmega. Huvi pÀrast, meetod Installeerida vastu vÔtma NodeContainter moodustab parameetrina nagu ka teised Installeerida meetodid, mida oleme nÀinud.
Kasutatav C++ varjatud teisendus, mis töötab siin, vĂ”tab meetodi tulemuse node.Get (1) (mis tagastab nutika nĂ€idiku sĂ”lme objekti peale â Ptr ) ja kasutab seda konstruktoris anonĂŒĂŒmse objekti jaoks NodeContainer, mis edastatakse seejĂ€rel meetodile Installeerida. Kui te ei suuda C++ koodis mÀÀratleda, millise allkirja meetod kompileerub ja tĂ€idetakse, otsige varjatud teisenduste hulgast.
NĂŒĂŒd nĂ€eme, et echoServer.Install kavatseb installida rakenduse UdpEchoServerApplication leitud NodeContainer, mida kasutame oma sĂ”lmede haldamiseks, sĂ”lm indeksiga 1. Meetod Installeerida tagastab konteineri, mis sisaldab nĂ€idikuid kĂ”ikidele rakendustele (antud juhul ainult ĂŒhele, kuna edastasime anonĂŒĂŒmse NodeContainer, mis sisaldab ĂŒhte sĂ”lme), loodud abistaja poolt.
Rakendustel tuleb nĂ€idata hetke, mil liikluse genereerimine algab âstartâ ja vĂ”ib osutuda vajalikuks ka nĂ€idata aega, mil see lĂ”petada âstopâ. Pakume mĂ”lemaid parameetreid. Need ajad mÀÀratakse ApplicationContainer Alusta ja Stop. Need meetodid vĂ”tavad vastu AegtĂŒĂŒpi parameetreid. Selles juhul kasutame C++ jagatud teisenduste jĂ€rjestust, et vĂ”tta C++ 1.0 ja muunda see objekti tnsâ3 Aja, kasutades objekti Sekundid sekunditeks tĂ”lkimiseks. Pidage meeles, et konversioonireegleid vĂ”ivad kontrollida mudeli autor, ja C++-l on oma reeglid, seega ei saa te alati loota, et parameetrid muudetakse nii, nagu olete oodanud. Kaks rida,
serverApps.Start (Sekundid (1.0));
serverApps.Stop (Sekundid (10.0));toob kaasa selle, et kĂ”lakuulamise rakendus kĂ€ivitub (lĂŒlitatakse automaatselt sisse) ĂŒhe sekundi pĂ€rast simuleerimise algust ja peatub (lĂŒlitatakse vĂ€lja) kĂŒmne sekundi pĂ€rast simuleerimist. Kuna oleme kuulutanud simuleerimise sĂŒndmuse (rakenduse peatamise sĂŒndmus), mis tĂ€idetakse kĂŒmne sekundi pĂ€rast, simuleeritakse vĂ€hemalt kĂŒmne sekundi vĂ”rgu töö.
UdpEchoClientHelper
Kliendiprogramm echo seadistatakse praktiliselt samamoodi nagu server. On olemas pÔhiobjekt UdpEchoClientApplication, mida haldab
UdpEchoClientHelper.
UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Sekundid (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Sekundid (2.0));
clientApps.Stop (Sekundid (10.0));Kuid meie eho-kliendi jaoks tuleb seadistada viis erinevat atribuudid. Esimesed kaks atribuudid seadistatakse loomise ajal. UdpEchoClientHelperMe edastame parameetrid, mida kasutatakse (abiÔiguslas) atribuutide seadistamiseks. «RemoteAddress» ja «RemotePort» vastavalt meie kokkuleppele vajalike parameetrite edastamiseks abiÔiguslase konstruktorisse.
Tuletame meelde, et kasutasime Ipv4InterfaceContainer IP-aadresside jĂ€lgimiseks, mille oleme oma seadmetele mÀÀranud. Nullliides konteinerite liideses vastab nullsĂ”lme IP-aadressile sĂ”lmede konteineris. Esimene liides konteinerite liideses vastab esimese sĂ”lme IP-aadressile sĂ”lmede konteineris. Nii et esimeses koodirea (ĂŒleval) loome abiĂ”iguslase ja anname talle teada, et kliendi eemalolev aadress on IP-aadress, mis on mÀÀratud sĂ”lmele, kus server asub. Samuti ĂŒtleme, et tuleb korraldada pakettide saatmine ĂŒheksandale pordile.
Atribuut «MaxPackets» teavitab klienti maksimaalsest paketihulgast, mille me saame saatma simuleerimise ajal. Atribuut «Interval» ĂŒtleb kliendile, kui kaua oodata pakettide vahel, ja atribuut «PacketSize» ĂŒtleb kliendile, kui suur peaks olema paketi koormus. Selle atribuutide kombinatsiooniga anname kliendile teada, et saata ĂŒks 1024-baidine pakk.
Nagu ka eho-serveri puhul, mÀÀrame eho-klientidele atribuudid Alusta ja Stop, kuid siin kĂ€ivitame kliendi sekundi pĂ€rast serveri sisselĂŒlitamist (kaks sekundit pĂ€rast simuleerimise algust).
4.2.8 Simulaator
Selles etapis peame simuleerimise kÀivitama. Seda tehakse globaalsete funktsioonide abil Simulator::Run.
Simulator::Run ();Kui me varem meetodeid kutsusime,
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
...
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));oleme tegelikult planeerinud sĂŒndmused simulaatoris 1,0 sekundiks, 2,0 sekundiks ja kaks sĂŒndmust 10,0 sekundiks. PĂ€rast kutset Simulator::Run, sĂŒsteem hakkab vaatama planeeritud sĂŒndmuste loendit ja neid tĂ€itma. Esiteks kĂ€ivitab see sĂŒndmuse 1,0 sekundi pĂ€rast, mis aktiveerib kaja-serveri rakenduse (see sĂŒndmus vĂ”ib omakorda planeerida palju teisi sĂŒndmusi). SeejĂ€rel kĂ€ivitab ta sĂŒndmuse, mis on planeeritud ajaks t = 2,0 sekundit, mis kĂ€ivitab kaja-kliendi rakenduse. Veel kord, see sĂŒndmus vĂ”ib planeerida veel palju sĂŒndmusi. SĂŒndmuse kĂ€ivitamise rakendamine kaja-kliendis alustab simulatsiooni andmeedastusfaasi, saates paketi serverisse.
Paketi saatmise toiming serverisse kutsub esile sĂŒndmuste ahela, mis planeeritakse automaatselt taustal ja mis teostavad kaja-signaalide pakettide saatmise mehhanismi vastavalt sĂŒnkroniseerimise parameetritele, mille oleme stsenaariumis mÀÀranud.
KokkuvĂ”ttes, kuna saadame vaid ĂŒhe paketi (tuletame meelde, et atribuut MaxPackets oli seadistatud ĂŒhikuks), selle ainsa kliendi kaja-pĂ€ringu poolt algatatud sĂŒndmuste ahel lĂ”peb ja simuleerimine lĂ€heb oote-reĆŸiimi. Nagu see juhtub, jÀÀvad planeeritud sĂŒndmusteks sĂŒndmused Stop serveri ja kliendi jaoks. Kui need sĂŒndmused on tĂ€idetud, ei jÀÀ edasisteks töötlemiseks enam sĂŒndmusi ja Simulator::Run tagastab kontrolli. Simulatsioon on lĂ”petatud.
Tuleb vaid enda pĂ€rast koristada. Seda tehakse globaalset funktsiooni kutsudes Simulator::Destroy. Kuna on kutsutud abifunktsioone (vĂ”i madala taseme koodi ns-3), mis on organiseeritud nii, et simulaatorisse on lisatud hĂ€vituskonksud kĂ”igi loodud objektide hĂ€vitamiseks. Te ei pea neid objekte ise jĂ€lgima â kĂ”ik, mida peate tegema, on kutsuda Simulator::Destroy ja lahkuda. Ns-3 sĂŒsteem teeb selle raske töö teie eest. Meie esimese ns-3 skripti, first.cc, jĂ€relejÀÀnud read teevadki seda:
Simulator::Destroy ();
return 0;
}Millal simulaator peatub?
ns-3 on diskreetsete sĂŒndmuste simulaator (DE). Sellises simulatsioonis on iga sĂŒndmus seotud oma tĂ€itmise ajaga, ja simulatsioon jĂ€tkub sĂŒndmuste töötlemisega nende esinemise jĂ€rjekorras simuleerimise kĂ€igus. SĂŒndmused vĂ”ivad pĂ”hjustada tulevaste sĂŒndmuste planeerimist (nĂ€iteks taimer vĂ”ib ennast ĂŒmberplaneerida, et jĂ€rgmisel ajavahemikul arve lĂ”petada).
Algseid nĂ€dalad algatatakse objektiga, nĂ€iteks IPv6 plaanib teenuste tuvastamise jagamisvĂ”rgus, naabrite pĂ€ringute ja muu sarnase. Rakendus kavandab esimest paketi saatmise sĂŒndmust jne. Kui sĂŒndmus töödeldakse, vĂ”ib see genereerida null, ĂŒhe vĂ”i mitu sĂŒndmust. Simulatsiooni kĂ€igus toimuvad sĂŒndmused, lihtsalt lĂ”petades vĂ”i genereerides uusi. Simulatsioon peatub automaatselt, kui sĂŒndmuste jĂ€rjekord on tĂŒhi vĂ”i kui tuvastatakse eriline sĂŒndmus. Stop. SĂŒndmus Stop genereeritakse funktsiooni Simulator::Stop (aja peatumine).
On tĂŒĂŒpiline olukord, kus Simulator::Stop on ÀÀrmiselt vajalik simulatsiooni peatamiseks: kui on enesetoetavad sĂŒndmused. Enesetoetavad (vĂ”i korduvad) sĂŒndmused - need on sĂŒndmused, mis alati uuesti kavandatakse. SeetĂ”ttu hoiavad nad alati sĂŒndmuste jĂ€rjekorra mitte tĂŒhi. On palju protokolle ja mooduleid, mis sisaldavad korduvaid sĂŒndmusi, nĂ€iteks:
âą FlowMonitor - perioodiline kontroll kadunud pakettide ĂŒle;
âą RIPng - perioodiline teave marsruudi tabelite ajakohastamise kohta;
âą jne.
Sel juhul Simulator::Stop on vajalik simuleerimise korrektselt lĂ”petamiseks. Lisaks, kui ns-3 on emulatsioonireĆŸiimis, kasutatakse RealtimeSimulator'i, et sĂŒnkroonida simulatsioonikell masina kellaga ja Simulator::Stop on vajalik protsessi peatamiseks.
Paljud Ă”pikutes toodud simulatsiooniprogrammid ei kutsu Simulator::Stop selgelt vĂ€lja, kuna need lĂ”petatakse automaatselt, kui sĂŒndmuste jĂ€rjekord on tĂŒhi. Siiski vĂ”tavad need programmid ka vastu Simulator::Stop'i kutseid. NĂ€iteks jĂ€rgmine tĂ€iendav kĂ€sk esimeses programmis planeerib selge peatamise 11. sekundi peal:
+ Simulator::Stop (Seconds (11.0));
Simulator::Run ();
Simulator::Destroy ();
return 0;
}Eelnimetatud ei muuda tegelikult selle programmi kĂ€itumist, kuna see konkreetne simulatsioon lĂ”peb loomulikult 10 sekundi pĂ€rast. Kuid kui saaksite peatamisaega ĂŒlaltoodud kĂ€sus muuta 11 sekundilt 1 sekundile, mĂ€rkaksite, et simulatsioon peatub enne, kui vĂ€ljund ekraanile jĂ”uab (kuna vĂ€ljund toimub umbes 2 sekundi simulatsiooniaja jooksul).
Oluline on kutsuda Simulator::Stop enne Simulator::Run'i, vastasel juhul ei pruugi Simulator::Run kunagi tagasi anda juhtimist pÔhiprogrammile, et see peatada!
4.2.9 Teie stsenaariumi koostamine
Oleme teie lihtsate skriptide loomise vĂ€ga lihtsaks teinud. KĂ”ik, mida peate tegema, on paigutada oma skript katalooge scratch ja see kokku pandakse automaatselt, kui te kĂ€ivitate Waf. Proovime. Minge tagasi ĂŒlatasandi katalooge ja kopeerige examples/tutorial/first.cc kausta scratch
$ cd ../..
$ cp examples/tutorial/first.cc scratch/myfirst.ccNĂŒĂŒd koondage oma esimene skript, kasutades waf:
$ ./wafTe peaksite nÀgema sÔnumeid selle kohta, et teie esimene nÀidis on edukalt loodud.
Waf: Sisenen katalooge `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
[614/708] cxx: scratch/myfirst.cc -> build/debug/scratch/myfirst_3.o
[706/708] cxx_link: build/debug/scratch/myfirst_3.o -> build/debug/scratch/myfirst
Waf: Lahkun katalooge `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' lĂ”petas edukalt (2.357s)NĂŒĂŒd saate nĂ€idist kĂ€ivitada (pange tĂ€hele, et kui te kogute oma programmi kataloogis scratch, peate selle ka kĂ€ivitama sealt scratch):
$ ./waf --run scratch/myfirstTe peaksite nÀgema sarnast vÀljundit:
Waf: Sisen katalooge `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Lahkub kataloogist `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' lÔpetati edukalt (0.418s) Saadetud 1024 baiti aadressile 10.1.1.2
Saadud 1024 baiti aadressilt 10.1.1.1
Saadud 1024 baiti aadressilt 10.1.1.2Siin nĂ€ete, et ehitussĂŒsteem kontrollib, et fail on kokku pandud, ja kĂ€ivitab selle. Te nĂ€ete logimist kliendi logis, mis nĂ€itab, et see saatis ĂŒhe 1024-baidise paketi kajaserverisse 10.1.1.2. Te vĂ”ite ka nĂ€ha logimist kajaserveris, mis ĂŒtleb, et ta sai 1024 baiti aadressilt 10.1.1.1. Kajaserver kordab paketti vaikselt, ja te nĂ€ete kliendi logis, et ta sai oma paketi tagasi serverist.
4.3 ns-3 Allikakood
NĂŒĂŒd, kui olete kasutanud mĂ”ned abistajad nsâ3, vĂ”ite vaatama hakata mĂ”ningaid allika koode, mis seda funktsionaalsust ellu viivad. KĂ”ige uuema koodi vĂ”ib vaadata meie veebi serveris jĂ€rgmise lingi kaudu: . Seal nĂ€ete Mercurial'i kokkuvĂ”tte lehte meie arenduspuu kohta nsâ3. Lehe ĂŒlaosas nĂ€ete mitmeid linke,
summary | shortlog | changelog | graph | tags | filesMinna edasi ja valida link failidele. Niimoodi nĂ€eb vĂ€lja enamiku meie repositsioonide ĂŒlemine tase:
drwxr-xr-x [up]
drwxr-xr-x bindings python files
drwxr-xr-x doc files
drwxr-xr-x examples files
drwxr-xr-x ns3 files
drwxr-xr-x scratch files
drwxr-xr-x src files
drwxr-xr-x utils files
-rw-r--r-- 2009-07-01 12:47 +0200 560 .hgignore file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1886 .hgtags file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1276 AUTHORS file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 30961 CHANGES.html file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 17987 LICENSE file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 3742 README file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 16171 RELEASE_NOTES file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 6 VERSION file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 88110 waf file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 28 waf.bat file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 35395 wscript file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 7673 wutils.py file | revisions | annotateMeie nĂ€idisskeemid asuvad kaustas examples. Kui klĂ”psate nĂ€idistele, nĂ€ete alamkaustade loendit. Ăks fail alamkaustas tutorial â first.cc. Kui klĂ”psate first.cc , nĂ€ete koodi, mida just Ă”ppisite.
Allikakood on peamiselt katalooge src. Saate allikakoodi vaadata, klikkides katalooge vĂ”i klikkides katalooge paremal pool nime. Kui klĂ”psate katalooge src, nĂ€ete src-alamkataloogide nimekirja. Kui seejĂ€rel klĂ”psate alamkatalooge core, leiate failide loendi. Esimene fail, mida nĂ€ete (selle juhendi kirjutamise hetkel) â abort.h. Kui klĂ”psate lingil abort.h, suunate teid allika faili abort.h, mis sisaldab kasulikke makrosid skriptidest vĂ€ljumiseks, kui avastatakse ebanormaalsed tingimused. Selle peatĂŒki jaoks kasutatud abifailide allikakood on kataloogis src/Applications/helper. Ărge kartke sirvida kataloogipuu kaudu, et mĂ”ista, mida ja kus on ja mĂ”ista ns-3 programmi stiili.
Allikas: habr.com
