Tutorial tas-simulatur tan-netwerk ns-3. Kapitolu 4

Tutorial tas-simulatur tan-netwerk ns-3. Kapitolu 4
kapitlu 1,2
kapitlu 3

4 Ħarsa ġenerali tal-kunċett
4.1 Astrazzjonijiet ewlenin
4.1.1 Nodu
4.1.2 Applikazzjoni
4.1.3 Kanal
4.1.4 Apparat Net
4.1.5 Assistenti topoloġiċi
4.2 L-ewwel skript ns-3
4.2.1 Kodiċi tal-boilerplate
4.2.2 Plug-ins
4.2.3 spazju tal-isem ns3
4.2.4 Logging
4.2.5 Funzjoni ewlenija
4.2.6 L-użu ta' assistenti tat-topoloġija
4.2.7 Użu ta' Applikazzjoni
4.2.8 Simulatur
4.2.9 Tibni l-iskrittura tiegħek
4.3 ns-3 Kodiċi tas-sors

Kapitolu 4

Ħarsa ġenerali tal-kunċett

L-ewwel ħaġa li rridu nagħmlu qabel ma nibdew nitgħallmu jew niktbu l-kodiċi ns-3 hija li nispjegaw ftit kunċetti bażiċi u astrazzjonijiet fis-sistema. Ħafna minn dan jista 'jidher ovvju għal xi wħud, iżda nirrakkomandaw li tieħu l-ħin biex taqra din it-taqsima biex tiżgura li qed tibda fuq pedament sod.

4.1 Astrazzjonijiet ewlenin

F'din it-taqsima, ser inħarsu lejn xi termini li huma komunement użati fuq il-web iżda li għandhom tifsira speċifika f'ns-3.

4.1.1 Nodu

Fil-lingwaġġ tal-Internet, apparat tal-kompjuter li jgħaqqad ma 'netwerk jissejjaħ host jew xi kultant sistema finali. Minħabba li ns-3 huwa simulatur tan-netwerk u mhux simulatur tal-Internet, aħna deliberatament ma nużawx it-terminu ospitanti, peress li dan huwa relatat mill-qrib mal-Internet u l-protokolli tiegħu. Minflok, nużaw terminu aktar ġenerali, użat ukoll minn simulaturi oħra, li joriġina fit-teorija tal-graffs: node (node).

Fl-ns-3, l-astrazzjoni sottostanti ta 'apparat tal-kompjuter tissejjaħ node. Din l-astrazzjoni hija rappreżentata f'C++ mill-klassi Node. Klassi NodeNode (node) jipprovdi metodi għall-manipulazzjoni ta' rappreżentazzjonijiet ta' tagħmir tal-kompjuter f'simulazzjonijiet.

Trid tifhem nodu bħal kompjuter li miegħu żżid il-funzjonalità. Int ser iżżid affarijiet bħal applikazzjonijiet, munzelli ta 'protokoll, u karti periferali b'sewwieqa li jippermettu lill-kompjuter jagħmel xogħol utli. Aħna nużaw l-istess mudell bażiku f'ns-3.

4.1.2 Applikazzjoni

Ġeneralment, is-softwer tal-kompjuter huwa maqsum f'żewġ klassijiet wesgħin. Is-softwer tas-sistema jorganizza diversi riżorsi tal-kompjuter bħal memorja, ċikli tal-proċessur, disk, netwerk, eċċ skond xi mudell tal-kompjuter. Is-softwer tas-sistema tipikament ma jużax dawn ir-riżorsi biex iwettaq kompiti li jibbenefikaw direttament lill-utent. Utent tipikament imexxi applikazzjoni biex jilħaq għan speċifiku, li jikseb u juża riżorsi kkontrollati mis-softwer tas-sistema.

Ħafna drabi l-linja ta 'separazzjoni bejn is-sistema u s-softwer tal-applikazzjoni tinġibed f'bidliet fil-livell ta' privileġġ li jseħħu fin-nases tas-sistema operattiva. ns-3 m'għandu l-ebda kunċett reali ta 'sistema operattiva u għalhekk l-ebda kunċett ta' livelli ta 'privileġġ jew sejħiet tas-sistema. Madankollu, għandna idea għal app. Hekk kif fl-applikazzjonijiet tas-softwer tad-"dinja reali" jaħdmu fuq kompjuters biex iwettqu l-kompiti, l-applikazzjonijiet ns-3 jimxu fuq ns-3 nodes biex jikkontrollaw simulazzjonijiet fid-dinja simulata.

Fl-ns-3, l-astrazzjoni bażika għal programm tal-utent li jiġġenera xi attività għall-immudellar hija applikazzjoni. Din l-astrazzjoni hija rappreżentata f'C++ mill-klassi Applikazzjoni. Il-klassi tal-Applikazzjoni tipprovdi metodi għall-manipulazzjoni tal-fehmiet tal-verżjoni tal-applikazzjonijiet tagħna fil-livell tal-utent f'simulazzjonijiet. L-iżviluppaturi huma mistennija li jispeċjalizzaw il-klassi Applikazzjoni f'sens ta 'programmazzjoni orjentata lejn l-oġġetti biex joħolqu applikazzjonijiet ġodda. F'dan it-tutorja, se nużaw speċjalizzazzjonijiet tal-klassi Applikazzjoni msejħa UdpEchoClientApplication и UdpEchoServerApplication. Kif tista' tistenna, dawn l-applikazzjonijiet jiffurmaw sett ta' applikazzjonijiet klijent/server użati biex jiġġeneraw u jirrepetu pakketti tan-netwerk.

4.1.3 Kanal

Fid-dinja reali, tista 'tqabbad kompjuter ma' netwerk. Ħafna drabi l-midja li fuqha tiġi trażmessa d-dejta f'dawn in-netwerks jissejħu kanali. Meta twaħħal kejbil Ethernet f'ħanut tal-ħajt, tkun qed tikkonnettja l-kompjuter tiegħek ma' link Ethernet. Fid-dinja ns-3 simulata, node huwa konness ma 'oġġett li jirrappreżenta kanal ta' komunikazzjoni. Hawnhekk, l-astrazzjoni bażika tas-subnetwork tal-komunikazzjoni tissejjaħ kanal u hija rappreżentata f'C++ mill-klassi Channel.

Klassi ChannelChannel jipprovdi metodi għall-ġestjoni tal-interazzjoni ta 'oġġetti tas-subnet u l-konnessjoni ta' nodi magħhom. Il-kanali jistgħu wkoll ikunu speċjalizzati minn żviluppaturi f'sens ta 'programmazzjoni orjentata lejn l-oġġetti. L-ispeċjalizzazzjoni tal-kanal tista’ timmudella xi ħaġa sempliċi daqs wajer. Kanal dedikat jista 'wkoll jimmudella affarijiet kumplessi bħal swiċċ Ethernet kbir jew spazju tridimensjonali mimli ostakli fil-każ ta' netwerks mingħajr fili.

Aħna ser nużaw verżjonijiet speċjalizzati tal-kanal f'dan it-tutorja msejħa CsmaChannelCsmaChannel, PointToPointChannelPointToPointChannel и WifiChannelWifiChannel. CsmaChannel, pereżempju, jimmudella verżjoni ta 'subnet ta' komunikazzjoni li timplimenta ambjent ta 'komunikazzjoni b'aċċess multiplu b'sens ta' trasportatur. Dan jagħtina funzjonalità bħal Ethernet.

4.1.4 Apparat Net

Kienet li jekk trid tikkonnettja kompjuter ma 'netwerk, kellek tixtri kejbil tan-netwerk speċifiku u apparat ta' ħardwer imsejjaħ (fit-terminoloġija tal-PC) karta periferali li kellha bżonn tiġi installata fil-kompjuter. Jekk karta periferali implimentat xi funzjonijiet tan-netwerking, kienu jissejħu network interface cards jew network cards. Illum, il-biċċa l-kbira tal-kompjuters jiġu b'ħardwer tal-interface tan-netwerk integrat u mhumiex meqjusa mill-utenti bħala apparati separati.

Kard tan-netwerk mhux se taħdem mingħajr sewwieq tas-softwer li jikkontrolla l-ħardwer tiegħu. F'Unix (jew Linux), biċċa tagħmir periferali hija kklassifikata bħala apparat. L-apparati huma ġestiti bl-użu ta' sewwieqa ta' apparat, u l-apparati tan-netwerk (NICs) huma ġestiti bl-użu ta' sewwieqa ta' apparat tan-netwerk (sewwieqa tat-tagħmir tan-netwerk) u huma kollettivament imsejħa apparati tan-netwerk (apparat nett). F'Unix u Linux, tirreferi għal tagħmir tan-netwerk b'ismijiet bħal eth0.

Fl-ns-3, l-astrazzjoni tal-apparat tan-netwerk tifrex kemm is-softwer tas-sewwieq kif ukoll il-ħardwer li qed jiġi mmudellat. Fis-simulazzjoni, apparat tan-netwerk huwa "installat" f'node biex jippermettilu jikkomunika ma 'nodi oħra permezz ta' kanali. Eżatt bħal kompjuter reali, nodu jista 'jiġi konness ma' kanali multipli permezz ta 'apparati multipli NetDevices.

L-estrazzjoni tan-netwerk ta' apparat hija rappreżentata f'C++ mill-klassi NetDevice. Klassi NetDevice jipprovdi metodi għall-ġestjoni ta 'konnessjonijiet ma' oġġetti Node u Channel; u jistgħu jiġu speċjalizzati mill-iżviluppaturi fis-sens ta 'programmazzjoni orjentata lejn l-oġġetti. F'dan it-tutorja se nużaw diversi verżjonijiet speċjalizzati ta 'NetDevice imsejħa CsmaNetDevice, PointToPointNetDevice и WifiNetDevice. Eżatt bħal adapter tan-netwerk Ethernet huwa ddisinjat biex jaħdem ma 'netwerk Ethernet, CsmaNetDevice iddisinjati biex jaħdmu magħhom CsmaChannel, PointToPointNetDevice iddisinjati biex jaħdmu magħhom PointToPointChannelU WifiNetDevice - iddisinjati biex jaħdmu magħhom WifiChannel.

4.1.5 Assistenti topoloġiċi

F'netwerk reali, issib kompjuters ospitanti b'kards tan-netwerk miżjuda (jew mibnija). F'ns-3 ngħidu li se tara nodi b'NetDevices imwaħħla. F'netwerk simulat kbir, ser ikollok bżonn torganizza konnessjonijiet bejn ħafna oġġetti nodu, NetDevice и Channel.

Minn meta kkonnettja NetDevices ma 'nodes, NetDevices għal links, jassenja indirizzi IP, eċċ. fl-ns-3 huma kompitu komuni, biex nagħmlu dan faċli kemm jista 'jkun aħna nipprovdu l-hekk imsejħa helpers tat-topoloġija. Pereżempju, biex toħloq NetDevice, għandek bżonn twettaq ħafna operazzjonijiet tal-kernel ns-3, żid indirizz MAC, tinstalla l-apparat tan-netwerk f'Node, tikkonfigura l-munzell tal-protokoll tan-node, u mbagħad qabbad in-NetDevice mal-Kanal. Saħansitra se jkun meħtieġ aktar xogħol biex tikkonnettja apparati multipli għal links b'ħafna punti u mbagħad tikkonnettja n-netwerks individwali f'netwerk Internetworks. Aħna nipprovdu oġġetti helper tat-topoloġija li jgħaqqdu dawn il-ħafna operazzjonijiet f'mudell faċli biex jintuża għall-konvenjenza tiegħek.

4.2 L-ewwel skript ns-3

Jekk installajt is-sistema kif issuġġerit hawn fuq, ser ikollok ir-rilaxx ns-3 f'direttorju msejjaħ repos fid-direttorju tad-dar tiegħek. Mur fid-direttorju rilaxx

Jekk ma jkollokx direttorju bħal dan, dan ifisser li ma speċifikajtx id-direttorju tal-output meta bnejt il-verżjoni tar-rilaxx ta 'ns-3, ibni hekk:
$ ./waf configure —build-profile=rilaxx —out=build/release,
$ ./waf build

hemm għandek tara struttura tad-direttorju simili għal dan li ġej:

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.pyc

Mur fid-direttorju eżempji/tutorial. Għandek tara fajl li jinsab hemm imsejjaħ l-ewwel.cc. Dan huwa skript li se joħloq konnessjoni sempliċi minn punt għal punt bejn żewġ nodi u jittrasmetti pakkett wieħed bejn in-nodi. Ejja nħarsu lejn din l-iskrittura linja b'linja; biex tagħmel dan, iftaħ first.cc fl-editur favorit tiegħek.

4.2.1 Kodiċi tal-boilerplate
L-ewwel linja fil-fajl hija l-linja tal-modalità tal-editur Emacs. Jgħid lill-emacs dwar il-konvenzjonijiet tal-ifformattjar (stil ta' kodifikazzjoni) li nużaw fil-kodiċi tas-sors tagħna.

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */

Din hija dejjem kwistjoni pjuttost kontroversjali, għalhekk irridu nistabbilixxu r-rekord biex inneħħuha mill-ewwel. Il-proġett ns-3, bħall-biċċa l-kbira tal-proġetti kbar, adotta stil ta’ kodifikazzjoni li l-kodiċi kkontribwit kollu jrid jikkonforma miegħu. Jekk trid tikkontribwixxi l-kodiċi tiegħek għall-proġett, eventwalment ikollok tikkonforma mal-istandard tal-kodifikazzjoni ns-3, kif deskritt fil-fajl doc/codingstd.txt jew muri fuq il-paġna web tal-proġett: https://www.nsnam.org/develop/contributing-code/coding-style/.

Nirrakkomandaw li tidra d-dehra u s-sensazzjoni tal-kodiċi ns-3 u tapplika dan l-istandard kull meta taħdem bil-kodiċi tagħna. It-tim kollu tal-iżvilupp u l-kontributuri qablu ma’ dan wara xi grumbling. Il-linja tal-modalità emacs hawn fuq tagħmilha faċli biex tifformattja b'mod korrett jekk qed tuża l-editur emacs.

Is-simulatur ns-3 huwa liċenzjat bl-użu GNU General Public License. Se tara l-header legali GNU xieraq f'kull fajl tad-distribuzzjoni ns-3. Ħafna drabi tara avviż dwar id-drittijiet tal-awtur għal waħda mill-istituzzjonijiet parteċipanti fil-proġett ns-3 fuq it-test GPL u l-awtur, muri hawn taħt.

/* 
* 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 Plug-ins

Il-kodiċi innifsu jibda b'serje ta 'dikjarazzjonijiet ta' inklużjoni (jinkludu).

#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"

Biex ngħinu lill-utenti tagħna ta 'scripting ta' livell għoli jlaħħqu man-numru kbir ta 'fajls header preżenti fis-sistema, aħna niġbruhom skont l-użu tagħhom f'moduli kbar. Aħna nipprovdu fajl header wieħed li jgħabbi b'mod rikorsiv il-fajls header kollha użati f'modulu partikolari. Minflok ma jkollok tfittex eżattament liema header għandek bżonn u possibbilment tikseb il-lista korretta ta 'dipendenzi, aħna nagħtuk il-ħila li tniżżel grupp ta' fajls f'granularità kbira. Mhuwiex l-aktar approċċ effiċjenti, iżda ċertament jagħmel il-kitba ta 'skripts ħafna aktar faċli.

Kull wieħed mill-ns-3 include files jitqiegħed f'direttorju msemmi ns3 (subdirectory tal-bini) biex jiġu evitati kunflitti tal-ismijiet tal-fajls matul il-proċess tal-bini. Fajl ns3/core-module.h jikkorrispondi għall-modulu ns-3, li se ssib fid-direttorju src/core fir-rilaxx li installajt. Fil-lista ta’ dan id-direttorju ssib numru kbir ta’ fajls ta’ header. Meta tagħmel l-assemblaġġ, Waf tpoġġi fajls ta' header pubbliċi fid-direttorju ns3 f'subdirettorju tibni/debug

Jekk ma jkollokx direttorju bħal dan, dan ifisser li ma speċifikajtx id-direttorju tal-output meta bnejt il-verżjoni tar-rilaxx ta 'ns-3, ibni hekk:
$ ./waf kkonfigurat --build-profile=debug --out=build/debug
$ ./waf build
jew
$ ./waf configure --build-profile=ottimizzat --out=bini/ottimizzat
$ ./waf build

jew jibnu/ottimizzati, skond il-konfigurazzjoni tiegħek. Waf se jiġġenera wkoll awtomatikament modulu jinkludi fajl biex jgħabbi l-fajls tal-header pubbliċi kollha. Peress li ovvjament qed issegwi din il-gwida reliġjużi, diġà għamilt

$ ./waf -d debug --enable-examples --enable-tests configure

biex jiġi kkonfigurat il-proġett biex imexxi debug builds li jinkludu eżempji u testijiet. Għamilt ukoll

$ ./waf

biex tgħaqqad il-proġett. Allura issa meta tħares fid-direttorju ../../build/debug/ns3, imbagħad hemm issib, fost oħrajn, il-fajls header tal-erba 'moduli murija hawn fuq. Tista' tħares lejn il-kontenut ta' dawn il-fajls u ssib li jinkludu l-fajls pubbliċi kollha użati mill-moduli korrispondenti.

4.2.3 spazju tal-isem ns3

Linja li jmiss fl-iskrittura l-ewwel.cc hija dikjarazzjoni tal-ispazju tal-isem.

using namespace ns3;

Il-proġett ns-3 huwa implimentat fi spazju tal-isem C++ imsejjaħ ns3. Dan jiġbor id-dikjarazzjonijiet kollha relatati mal-ns-3 f'ambitu barra mill-ispazju tal-isem globali, li wieħed jittama li jgħin fl-integrazzjoni ma 'kodiċi ieħor. L-użu tal-operatur C++ jintroduċi l-ispazju tal-isem ns-3 fir-reġjun dikjarattiv (globali) attwali. Dan huwa mod fancy kif tgħid li wara din id-dikjarazzjoni, mhux se jkollok bżonn ittajpja l-operatur tal-permess ns3::scope qabel il-kodiċi ns-3 tiegħek kollu biex tużah. Jekk m'intix familjari mal-ispazji tal-isem, irreferi għal kważi kull ktieb tat-test C++ u qabbel l-ispazju tal-isem ns3 billi tuża l-ispazju tal-isem u d-dikjarazzjoni std using namespace std; f'eżempji ta 'ħidma ma' l-operatur tal-output ispiża u nixxigħat.

4.2.4 Logging

Il-linja li jmiss tal-iskrittura hija,

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Se nużaw din id-dikjarazzjoni bħala post konvenjenti biex niddiskutu s-sistema tad-dokumentazzjoni tagħna Ossiġenu. Jekk tħares lejn il-websajt tal-proġett ns-3, issib link tad-Dokumentazzjoni fil-bar tan-navigazzjoni. Jekk tikklikkja din il-link int se tittieħed lejn il-paġna tad-dokumentazzjoni tagħna. Hemm link "Latest Release" li se tieħdok għad-dokumentazzjoni għall-aħħar verżjoni stabbli ta 'ns-3. Jekk tagħżel il-link "Dokumentazzjoni tal-API", tittieħed fil-paġna tad-dokumentazzjoni tal-API ns-3.

Fuq in-naħa tax-xellug tal-paġna għandek issib rappreżentazzjoni grafika tal-istruttura tad-dokumentazzjoni. Post tajjeb biex tibda huwa l-"ktieb" Moduli ns-3 fis-siġra tan-navigazzjoni ns-3. Jekk tikxef Moduli, se tara lista ta 'dokumentazzjoni tal-moduli ns-3. Kif diskuss hawn fuq, il-kunċett ta 'modulu hawnhekk huwa direttament relatat mal-fajls inklużi fil-modulu hawn fuq. Is-subsistema tal-logging ns-3 hija diskussa fit-taqsima Bl-użu tal-Modulu tal-Logging, għalhekk ser nerġgħu lura għaliha aktar tard f'dan it-tutorja, iżda tista 'titgħallem dwar id-dikjarazzjoni ta' hawn fuq billi tħares lejn il-modulu Coreu mbagħad tiftaħ il-ktieb Għodod ta 'debuggingu mbagħad tagħżel il-paġna Logging. Ikklikkja fuq Logging.

Issa għandek tirrevedi d-dokumentazzjoni Ossiġenu għall-modulu Logging. Fil-lista ta' macros fin-naħa ta' fuq tal-paġna, se tara entrata għal NS_LOG_COMPONENT_DEFINE. Qabel ma tikklikkja l-link, kun żgur li tħares lejn id-“Deskrizzjoni dettaljata” tal-modulu tar-reġistrazzjoni biex tifhem kif taħdem b’mod ġenerali. Biex tagħmel dan tista' tiskrollja 'l isfel jew tagħżel "Aktar..." taħt it-tabella.

Ladarba jkollok idea ġenerali ta' x'qed jiġri, kompli u ħares lejn id-dokumentazzjoni għall-NS_LOG_COMPONENT_DEFINE speċifiku. Mhux se nidduplika d-dokumentazzjoni hawn, iżda biex niġbor fil-qosor, din il-linja tiddikjara komponent ta' reġistrazzjoni msejjaħ FirstScriptExample, li jippermettilek li tippermetti jew tiddiżattiva l-illoggjar tal-messaġġi tal-console b'referenza għal isem.

4.2.5 Funzjoni ewlenija

Fil-linji li ġejjin tal-iskrittura se tara,

int 
main (int argc, char *argv[])
{ 

Din hija sempliċement dikjarazzjoni tal-funzjoni prinċipali tal-programm tiegħek (kitba). Bħal kull programm C++, trid tiddefinixxi funzjoni ewlenija, din tiġi esegwita l-ewwel. M'hemm xejn speċjali hawn. L-iskrittura ns-3 tiegħek hija biss programm C++. Il-linja li ġejja tistabbilixxi r-riżoluzzjoni tal-ħin għal nanosekonda 1, li hija l-default:

Time::SetResolution (Time::NS);

Ir-riżoluzzjoni tal-ħin, jew sempliċiment ir-riżoluzzjoni, hija l-iżgħar valur tal-ħin li jista 'jintuża (l-iżgħar differenza rappreżentabbli bejn żewġ darbiet). Tista 'tbiddel ir-riżoluzzjoni eżattament darba. Il-mekkaniżmu li jipprovdi din il-flessibbiltà jikkonsma l-memorja, għalhekk ladarba r-riżoluzzjoni tkun issettjata b'mod espliċitu, aħna neħilsu l-memorja, u nevitaw aktar aġġornamenti. (Jekk ma tissettjax ir-riżoluzzjoni b'mod espliċitu, hija default għal nanosekonda waħda u l-memorja tinħeles meta tibda s-simulazzjoni.)

Iż-żewġ linji ta 'kitba li ġejjin huma użati biex jippermettu żewġ komponenti ta' qtugħ li huma mibnija fl-applikazzjonijiet EchoClient и EchoServer:

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

Jekk taqra d-dokumentazzjoni għall-komponent Logging, se tara li hemm diversi livelli ta 'logging/granularità li tista' tattiva fuq kull komponent. Dawn iż-żewġ linji ta 'kodiċi jippermettu l-illoggjar tad-debug għal-livell INFO għall-klijenti u s-servers tal-echo. F'dan il-livell, l-applikazzjoni se tipprintja messaġġi hekk kif tibgħat u tirċievi pakketti waqt is-simulazzjoni.

Issa ser nidħlu fin-negozju tal-ħolqien tat-topoloġija u t-tmexxija tas-simulazzjoni. Aħna nużaw oġġetti helper tat-topoloġija biex nagħmlu dan ix-xogħol faċli kemm jista 'jkun.

4.2.6 L-użu ta' assistenti tat-topoloġija

Iż-żewġ linji ta 'kodiċi li jmiss fl-iskrittura tagħna fil-fatt se joħolqu l-oġġetti Node ns-3 li se jirrappreżentaw il-kompjuters fis-simulazzjoni.

NodeContainer nodes;
nodes.Create (2);

Qabel inkomplu, ejja nsibu d-dokumentazzjoni għall-klassi NodeContainer. Mod ieħor biex tasal għad-dokumentazzjoni għal klassi partikolari huwa permezz tat-tab Klassijiet fuq il-paġni Ossiġenu. Jekk diġà għandek Doxygen miftuħ, sempliċement iscrollja sal-quċċata tal-paġna u agħżel it-tab Klassijiet. Għandek tara sett ġdid ta 'tabs, li waħda minnhom hija lista ta' klassijiet. Taħt din it-tab se tara lista tal-klassijiet ns-3 kollha. Skrollja 'l isfel sa ns3::NodeContainer. Meta ssib klassi, agħżelha biex tmur fid-dokumentazzjoni għall-klassi.

Kif niftakru, waħda mill-astrazzjonijiet ewlenin tagħna hija n-node. Jirrappreżenta l-kompjuter li miegħu se nżidu affarijiet bħal munzelli ta 'protokoll, applikazzjonijiet u kards periferali. Assistent tat-topoloġija NodeContainer jipprovdi mod konvenjenti biex toħloq, timmaniġġja u taċċessa kwalunkwe oġġett nodu, li noħolqu biex imexxu s-simulazzjoni. L-ewwel linja t'hawn fuq sempliċement tiddikjara NodeContainer, li aħna nsejħu nodi. It-tieni linja ssejjaħ il-metodu Oħloq fuq l-oġġett tan-nodi u titlob lill-kontenitur biex joħloq żewġ nodi. Kif deskritt fi Ossiġenu, il-kontenitur jitlob lis-sistema ns-3 biex toħloq żewġ oġġetti nodu u jaħżen indikaturi għal dawn l-oġġetti internament.

In-nodi maħluqa fl-iskript għadhom ma jagħmlu xejn. Il-pass li jmiss fil-bini tat-topoloġija huwa li tgħaqqad in-nodi tagħna man-netwerk. L-aktar forma sempliċi ta 'netwerk li nappoġġjaw hija konnessjoni minn punt għal punt bejn żewġ nodi. Issa se noħolqu konnessjoni bħal din.

PointToPointHelper

Noħolqu konnessjoni minn punt għal punt billi tuża mudell familjari, billi nużaw oġġett helper tat-topoloġija biex nagħmlu x-xogħol ta 'livell baxx meħtieġ għall-konnessjoni. Ifakkar li ż-żewġ astrazzjonijiet ewlenin tagħna NetDevice и Channel. Fid-dinja reali, dawn it-termini jikkorrispondu bejn wieħed u ieħor għal kards periferali u kejbils tan-netwerk. Tipikament, dawn iż-żewġ affarijiet huma relatati mill-qrib ma 'xulxin, u ħadd ma jista' joqgħod fuq il-qsim, pereżempju, ta' apparati Ethernet fuq kanal mingħajr fili. L-helpers tat-topoloġija tagħna jsegwu din ir-relazzjoni mill-qrib u għalhekk se tuża oġġett wieħed f'dan ix-xenarju PointToPointHelper għat-twaqqif u l-konnessjoni ta 'oġġetti ns-3 PointToPointNetDevice и PointToPointChannel. It-tliet linji li jmiss fl-iskrittura:

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

L-ewwel linja,

PointToPointHelper pointToPoint;

joħloq eżempju ta 'oġġett fuq il-munzell PointToPointHelper. Mill-aspett tal-ogħla livell il-linja li ġejja,

pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));

jgħidlek l-oġġett PointToPointHelper uża l-valur "5 Mbit/s" (ħames megabits kull sekonda) bħala "DataRate".

Minn perspettiva aktar speċifika, is-sekwenza "DataRate" tikkorrispondi għal dak li nsejħu attribut PointToPointNetDevice. Jekk tħares lejn Ossiġenu għall-klassi ns3::PointToPointNetDevice u fid-dokumentazzjoni għall-metodu GetTypeId issib lista ta 'attributi definiti għall-apparat. Fosthom se jkun hemm l-attribut "DataRate" Ħafna mill-oġġetti ns-3 viżibbli għall-utent għandhom listi simili ta' attributi. Aħna nużaw dan il-mekkaniżmu biex inwaqqfu faċilment is-simulazzjoni mingħajr rikompilazzjoni, kif se tara fit-taqsima li jmiss.

Simili għal "DataRate" f'PointToPointNetDevice, issib l-attribut "Dewmien" assoċjat mal-PointToPointChannel. Il-linja finali

pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

jgħid PointToPointHelper uża l-valur "2 ms" (żewġ millisekondi) bħala l-valur tad-dewmien tal-propagazzjoni għall-link minn punt għal punt li sussegwentement toħloq.

NetDeviceContainer

Bħalissa għandna fl-iskrittura NodeContainer, li fih żewġ nodi. Għandna PointToPointHelper, li hija ppreparata għall-ħolqien ta 'oġġetti PointToPointNetDevices u tgħaqqadhom billi tuża oġġett PointToPointChannel. Hekk kif użajna l-oġġett helper tat-topoloġija NodeContainer biex noħolqu nodi, aħna nistaqsu PointToPointHelper twettaq xogħol għalina relatat mal-ħolqien, il-konfigurazzjoni u l-installazzjoni tal-apparati tagħna. Għandna bżonn lista tal-oġġetti kollha maħluqa NetDevice, hekk nużaw NetDeviceContainer biex jaħżnuhom bl-istess mod li użajna NodeContainer biex taħżen in-nodi li ħloqna. Iż-żewġ linji ta 'kodiċi li jmiss,

NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);

setup komplut tal-apparat u tal-kanal. L-ewwel linja tiddikjara l-kontenitur tal-apparat imsemmi hawn fuq, u t-tieni tagħmel ix-xogħol ewlieni. Metodu Installa faċilità PointToPointHelper taċċetta NodeContainer bħala parametru. Ġewwa NetDeviceContainer għal kull node li jinsab fi NodeContainer tinħoloq (għall-komunikazzjoni minn punt għal punt irid ikun hemm eżattament tnejn minnhom) PointToPointNetDevice tinħoloq u tiġi ffrankata fil-kontenitur tal-apparat. PointToPointChannel tinħoloq u tnejn huma mwaħħla magħha PointToPointNetDevices. Wara li toħloq oġġetti, l-attributi maħżuna fil PointToPointHelper, jintużaw biex jinizjalizzaw l-attributi korrispondenti fl-oġġetti maħluqa.

Wara li tagħmel sejħa pointToPoint.Install (nodi) se jkollna żewġ nodi, kull wieħed b'apparat tan-netwerk minn punt għal punt installat u konnessjoni waħda minn punt għal punt bejniethom. Iż-żewġ apparati se jkunu kkonfigurati biex jittrasmettu data b'veloċità ta 'ħames megabits kull sekonda b'dewmien ta' trażmissjoni ta 'żewġ millisekondi fuq il-kanal.

InternetStackHelper

Issa għandna nodi u apparati kkonfigurati, iżda n-nodi tagħna m'għandhomx munzelli ta 'protokolli installati. Iż-żewġ linji ta 'kodiċi li jmiss se jieħdu ħsieb dan.

InternetStackHelper stack;
stack.Install (nodes);

InternetStackHelper - huwa helper tat-topoloġija għall-munzelli tal-Internet, simili għal PointToPointHelper għal tagħmir tan-netwerk minn punt għal punt. Metodu Installa jieħu NodeContainer bħala parametru. Meta tiġi esegwita, se tinstalla l-munzell tal-Internet (TCP, UDP, IP, eċċ.) Fuq kull node tal-kontenitur.

IPv4AddressHelper

Imbagħad għandna bżonn nassoċjaw it-tagħmir tagħna ma 'indirizzi IP. Aħna nipprovdu assistent tat-topoloġija biex jimmaniġġja l-allokazzjoni tal-indirizz IP. L-unika API viżibbli għall-utent hija li tissettja l-indirizz IP bażi u n-netmask biex tuża meta tagħmel id-distribuzzjoni tal-indirizz attwali (dan isir f'livell aktar baxx fi ħdan il-helper). Iż-żewġ linji ta 'kodiċi li jmiss fl-iskrittura eżempju tagħna l-ewwel.cc,

Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");

tiddikjara l-oġġett helper tal-indirizz u għidlu li għandu jibda jalloka indirizzi IP min-netwerk 10.1.1.0, billi juża l-bitmask 255.255.255.0 biex jiddetermina. B'mod awtomatiku, l-indirizzi allokati jibdew f'wieħed u jiżdiedu b'mod monotoniku, għalhekk l-ewwel indirizz allokat minn din il-bażi se jkun 10.1.1.1, imbagħad 10.1.1.2, eċċ. Fir-realtà, f'livell baxx, is-sistema ns-3 tiftakar l-indirizzi IP kollha allokati u tiġġenera żball fatali jekk aċċidentalment toħloq sitwazzjoni fejn l-istess indirizz jiġi ġġenerat darbtejn (mill-mod, dan l-iżball huwa diffiċli biex jiġi debug).

Il-linja tal-kodiċi li ġejja,

Ipv4InterfaceContainer interfaces = address.Assign (devices);

twettaq l-assenjazzjoni tal-indirizz attwali. Fl-ns-3 nistabbilixxu konnessjoni bejn indirizz IP u apparat li juża l-oġġett IPv4Interface. Hekk kif kultant neħtieġu lista ta’ apparati tan-netwerk maħluqa mill-assistent għal użu aktar tard, kultant għandna bżonn lista ta’ oġġetti IPv4Interface. IPv4InterfaceContainer jipprovdi din il-funzjonalità.

Bnejna netwerk minn punt għal punt, b'munzelli installati u indirizzi IP assenjati. Issa neħtieġu applikazzjonijiet f'kull nodu biex niġġeneraw it-traffiku.

4.2.7 Użu ta' Applikazzjoni

Ieħor mill-astrazzjonijiet ewlenin tas-sistema ns-3 huwa applikazzjoni (applikazzjoni). F'dan ix-xenarju qed nużaw żewġ speċjalizzazzjonijiet tal-klassi bażi applikazzjoni ns-3 imsejħa UdpEchoServerApplication и UdpEchoClientApplication. Bħal f'każijiet preċedenti, nużaw oġġetti awżiljarji biex tikkonfigura u timmaniġġja l-oġġetti bażi. Hawnhekk nużaw UdpEchoServerHelper и UdpEchoClientHelper oġġetti biex jagħmlulna ħajjitna aktar faċli.

UdpEchoServerHelper

Il-linji ta 'kodiċi li ġejjin fl-iskrittura eżempju tagħna first.cc huma użati biex jiġi kkonfigurat applikazzjoni ta' server echo UDP fuq wieħed min-nodi li ħloqna qabel.

UdpEchoServerHelper echoServer (9);

ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

L-ewwel linja ta 'kodiċi fis-snippet ta' hawn fuq toħloq UdpEchoServerHelper. Bħas-soltu, din mhix applikazzjoni nnifisha, hija oġġett li jgħinna noħolqu applikazzjonijiet reali. Waħda mill-konvenzjonijiet tagħna hija li ngħaddu l-attributi meħtieġa lill-kostruttur tal-oġġett helper. F'dan il-każ, l-helper ma jista 'jagħmel xejn utli sakemm ma jingħatax in-numru tal-port li fuqu s-server se jisma' għall-pakketti, dan in-numru għandu jkun magħruf ukoll lill-klijent. F'dan il-każ, ngħaddu n-numru tal-port lill-kostruttur helper. Il-kostruttur, min-naħa tiegħu, sempliċement jagħmel SetAttribute bil-valur mgħoddi. Aktar tard, jekk mixtieq, tista' tuża SetAttribute biex tissettja valur differenti għall-attribut Port.

Bħal ħafna oġġetti awżiljarji oħra, l-oġġett UdpEchoServerHelper għandu metodu Installa. L-eżekuzzjoni ta 'dan il-metodu effettivament toħloq applikazzjoni bażika ta' server echo u torbotha mal-host. Interessanti, il-metodu Installa taċċetta NodeContainer bħala parametru bħall-oħrajn Installa metodi li rajna.

Il-konverżjoni impliċita C++ li taħdem hawn tieħu r-riżultat tal-metodu node.Get(1) (li jirritorna pointer intelliġenti għall-oġġett node - Ptr ) u jużaha fil-kostruttur għall-oġġett anonimu NodeContainerli mbagħad jiġi mgħoddi għall-metodu Installa. Jekk ma tistax tiddetermina fil-kodiċi C++ liema firma tal-metodu tiġi kkompilata u esegwita, imbagħad ħares fost il-konverżjonijiet impliċiti.

Issa naraw dan echoServer.Install wasal biex tinstalla l-applikazzjoni UdpEchoServerApplication fuq misjuba fi NodeContainerli nużaw biex jimmaniġġjaw in-nodi tagħna, node b'indiċi 1. Metodu Installa se jirritorna kontenitur li fih indikazzjonijiet għall-applikazzjonijiet kollha (f'dan il-każ waħda, peress li aħna għadda anonimu NodeContainer, li fih nodu wieħed) maħluqa mill-helper.

L-applikazzjonijiet iridu jispeċifikaw meta jibdew jiġġeneraw it-traffiku "ibda" u jista 'jkollha bżonn tispeċifika wkoll żmien meta twaqqafha "waqfa". Aħna nipprovdu ż-żewġ għażliet. Dawn il-ħinijiet huma stabbiliti bl-użu tal-metodi Applikazzjoni Kontenitur bidu и Stop. Dawn il-metodi jaċċettaw parametri tat-tip ħin. F'dan il-każ nużaw sekwenza espliċita ta 'konverżjonijiet C++ biex nieħdu C++ doppju 1.0 u jaqilbu f'oġġett ta 'Ħin tns-3 li juża l-oġġett Sekondi biex jikkonverti għal sekondi. Ftakar li r-regoli ta 'konverżjoni jistgħu jiġu kkontrollati mill-awtur tal-mudell, u C++ għandu r-regoli tiegħu stess, għalhekk mhux dejjem tista' toqgħod fuq il-parametri li qed jiġu kkonvertiti kif stennejt. Żewġ linji

serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

se tikkawża li l-applikazzjoni tas-server echo tibda (tixgħel awtomatikament) sekonda wara li tibda s-simulazzjoni u tieqaf (itfi) wara għaxar sekondi tas-simulazzjoni. Minħabba l-fatt li aħna ddikjarajna avveniment ta 'simulazzjoni (avveniment ta' waqfien tal-applikazzjoni), li se jiġi eżegwit f'għaxar sekondi, mill-inqas għaxar sekondi ta 'tħaddim tan-netwerk se jiġu simulati.

UdpEchoClientHelper

Applikazzjoni tal-klijent miss ikkonfigurat b'mod kważi simili għas-server. Hemm oġġett bażi UdpEchoClientApplication, li hija kkontrollata
UdpEchoClientHelper.

UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));;

Madankollu, għall-klijent echo għandna bżonn nissettjaw ħames attributi differenti. L-ewwel żewġ attributi huma stabbiliti fil-ħin tal-ħolqien UdpEchoClientHelper. Aħna ngħaddu parametri li jintużaw (ġewwa l-helper) biex jiġu stabbiliti l-attributi "RemoteAddress" и "RemotePort" skond il-ftehim tagħna biex jgħaddu l-parametri meħtieġa lill-kostruttur helper.

Ejja niftakru li użajna IPv4InterfaceContainer biex issegwi l-indirizzi IP li nkunu assenjati lill-apparati tagħna. L-interface null fil-kontenitur tal-interfaces se jikkorrispondi għall-indirizz IP tan-nodu null fil-kontenitur tan-nodi. L-ewwel interface fil-kontenitur tal-interfaces jikkorrispondi għall-indirizz IP tal-ewwel node fil-kontenitur tan-nodi. Għalhekk, fl-ewwel linja tal-kodiċi (hawn fuq), noħolqu helper u ngħidulu li l-indirizz remot tal-klijent se jkun l-indirizz IP assenjat lill-host fejn jinsab is-server. Ngħidu wkoll li rridu nirranġaw biex il-pakketti jintbagħtu fil-port disgħa.

L-attribut "MaxPackets" jgħid lill-klijent in-numru massimu ta 'pakketti li nistgħu nibagħtu matul is-simulazzjoni. L-attribut "Interval" jgħid lill-klijent kemm għandu jistenna bejn il-pakketti, u l-attribut "PacketSize" jgħid lill-klijent kemm għandu jkun kbir it-tagħbija tal-pakkett. B'din il-kombinazzjoni ta 'attributi aħna ngħidu lill-klijent biex jibgħat pakkett wieħed ta' 1024 byte.

Bħal fis-server tal-echo, aħna nissettjaw l-attributi tal-klijent tal-echo bidu и Stop, iżda hawn nibdew il-klijent sekonda wara li s-server jinxtegħel (żewġ sekondi wara l-bidu tas-simulazzjoni).

4.2.8 Simulatur

F'dan il-punt irridu nħaddmu s-simulazzjoni. Dan isir bl-użu tal-funzjoni globali Simulatur::Run.

Simulator::Run ();

Meta qabel konna nsejħu metodi,

serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
... 
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

fil-fatt ippjanajna avvenimenti fis-simulatur f'1,0 sekondi, 2,0 sekondi, u żewġ avvenimenti f'10,0 sekondi. Wara s-sejħa Simulatur::Run, is-sistema se tibda tara l-lista ta 'avvenimenti skedati u tesegwixxihom. L-ewwel se jispara avveniment wara 1,0 sekondi, li se jqanqal l-applikazzjoni tas-server tal-echo (dan l-avveniment jista’ min-naħa tiegħu jiskeda ħafna avvenimenti oħra). Imbagħad se jispara avveniment skedat f't=2,0 sekondi li se jniedi l-applikazzjoni tal-klijent echo. Għal darb'oħra, dan l-avveniment jista' jkollu ħafna aktar avvenimenti ppjanati. L-implimentazzjoni tal-avveniment tal-bidu fil-klijent echo se tibda l-fażi tat-trasferiment tad-dejta tas-simulazzjoni billi tibgħat pakkett lis-server.

L-att li jintbagħat pakkett lis-server se jwassal għal katina ta 'avvenimenti li se jiġu skedati awtomatikament wara l-kwinti u li se timplimenta l-mekkanika li tibgħat pakkett ta' eku skond il-parametri ta 'ħin li waqqafna fl-iskrittura.

Bħala riżultat, peress li qed nibagħtu pakkett wieħed biss (ftakar, l-attribut MaxPackets kien issettjat għal wieħed), il-katina ta 'avvenimenti mibdija minn dan il-ping tal-klijent wieħed se tispiċċa u s-simulazzjoni tidħol fil-modalità standby. Ladarba dan iseħħ, l-avvenimenti skedati li jifdal se jkunu l-avvenimenti Stop għal server u klijent. Meta dawn l-avvenimenti jiġu eżegwiti, mhux se jkun hemm avveniment għal aktar ipproċessar u Simulatur::Run se jirritorna l-kontroll. Is-simulazzjoni hija kompluta.

Li jibqa’ biss li tnaddaf wara lilek innifsek. Dan isir billi ssejjaħ il-funzjoni globali Simulatur::Eqred. Minħabba li l-funzjonijiet helper (jew kodiċi ns-3 ta 'livell baxx) ġew imsejħa, li huma organizzati sabiex il-ganċijiet ġew imdaħħla fis-simulatur biex jeqirdu l-oġġetti kollha li nħolqu. Ma kellekx bżonn issegwi xi wieħed minn dawn l-oġġetti lilek innifsek - kull ma kellek tagħmel kien iċempel Simulatur::Eqred u toħroġ. Is-sistema ns-3 se tagħmel dan ix-xogħol iebes għalik. Il-linji li fadal tal-ewwel script ns-3 tagħna, first.cc, jagħmlu dan:

Simulator::Destroy ();
return 0;
}

Meta se jieqaf is-simulatur?

ns-3 huwa simulatur ta' avveniment diskret (DE). F'tali simulatur, kull avveniment huwa assoċjat mal-ħin tal-eżekuzzjoni tiegħu, u s-simulazzjoni tkompli billi tipproċessa l-avvenimenti fl-ordni li jseħħu hekk kif is-simulazzjoni timxi 'l quddiem. L-avvenimenti jistgħu jikkawżaw avvenimenti futuri li jiġu skedati (per eżempju, tajmer jista 'jiskeda mill-ġdid lilu nnifsu biex jintemm l-għadd fl-intervall li jmiss).

L-avvenimenti inizjali normalment jinbdew mill-entità, pereżempju IPv6 se jiskeda l-iskoperta ta 'servizzi fuq in-netwerk, talbiet tal-ġirien, eċċ. L-applikazzjoni tiskeda l-ewwel avveniment li jibgħat il-pakkett, eċċ. Meta avveniment jiġi pproċessat, jista' jiġġenera avveniment żero, wieħed jew aktar. Hekk kif is-simulazzjoni timxi 'l quddiem, iseħħu avvenimenti, jew jispiċċaw jew joħolqu oħrajn ġodda. Is-simulazzjoni tieqaf awtomatikament jekk il-kju tal-avvenimenti jkun vojt jew jiġi skopert avveniment speċjali Stop. Avveniment Stop iġġenerat mill-funzjoni Simulatur::Stop (waqfien ħin).

Hemm każ tipiku fejn Simulator::Stop huwa assolutament meħtieġ biex titwaqqaf is-simulazzjoni: meta jkun hemm avvenimenti li jsostnu lilhom infushom. Avvenimenti li jsostnu lilhom infushom (jew li jirrepetu) huma avvenimenti li dejjem jiġu skedati mill-ġdid. Bħala konsegwenza, huma dejjem iżommu l-kju tal-avvenimenti mhux vojta. Hemm ħafna protokolli u moduli li fihom avvenimenti ripetuti, pereżempju:

• FlowMonitor - verifika perjodika għal pakketti mitlufa;

• RIPng – xandir perjodiku ta' aġġornamenti tat-tabella tar-routing;

• eċċ.

F’każijiet bħal dawn Simulatur::Stop meħtieġ biex titwaqqaf is-simulazzjoni b'mod korrett. Barra minn hekk, meta ns-3 ikun fil-mod ta 'emulazzjoni, ir-RealtimeSimulator jintuża biex jissinkronizza l-arloġġ ta' simulazzjoni mal-arloġġ tal-magna, u Simulatur::Stop meħtieġ biex jitwaqqaf il-proċess.

Ħafna mill-programmi ta 'simulazzjoni fil-ktieb tat-test ma jsejħux Simulatur::Stop espliċitament, peress li jispiċċaw awtomatikament meta l-avvenimenti fil-kju jiġu eżawriti. Madankollu, dawn il-programmi se jaċċettaw ukoll is-Simulatur::Stop call. Pereżempju, id-dikjarazzjoni addizzjonali li ġejja fl-ewwel programm ta’ eżempju għandha tiskeda waqfa espliċita fi 11-il sekonda:

+ Simulator::Stop (Seconds (11.0));
  Simulator::Run ();
  Simulator::Destroy ();
  return 0;
}

Dan ta 'hawn fuq fil-fatt mhux se jbiddel l-imġieba ta' dan il-programm, peress li din is-simulazzjoni partikolari tispiċċa naturalment wara 10 sekondi. Imma kieku kellek tibdel il-ħin tal-waqfien fid-dikjarazzjoni ta 'hawn fuq minn 11-il sekonda għal 1 sekonda, tinnota li s-simulazzjoni tieqaf qabel ma kwalunkwe output tolqot l-iskrin (peress li l-output iseħħ wara madwar 2 sekondi ta' ħin ta 'simulazzjoni).

Huwa importanti li ssejjaħ Simulator::Stop qabel issejjaħ Simulator::Run; inkella Simulatur::Run qatt ma jista 'jirritorna l-kontroll lill-programm prinċipali biex jesegwixxi l-waqfien!

4.2.9 Tibni l-iskrittura tiegħek

Għamilna l-ħolqien ta' skripts sempliċi tiegħek trivjali. Kull ma trid tagħmel hu li tpoġġi l-iskrittura tiegħek fid-direttorju tal-bidu u tinbena awtomatikament jekk tmexxi Waf. Ejja nipruvaw. Mur lura għad-direttorju tal-ogħla livell u kkopja eżempji/tutorial/first.cc għall-katalgu scratch

$ cd ../.. 
$ cp examples/tutorial/first.cc scratch/myfirst.cc

Issa ibni l-ewwel skript kampjun tiegħek billi tuża waf:

$ ./waf

Għandek tara messaġġi li jindikaw li l-ewwel eżempju tiegħek inħoloq b'suċċess.

Waf: Entering directory `/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: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (2.357s)

Issa tista 'tmexxi l-eżempju (innota li jekk tibni l-programm tiegħek fid-direttorju tal-bidu, allura trid tmexxih minn scratch):

$ ./waf --run scratch/myfirst

Għandek tara output simili:

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) Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

Hawnhekk tista 'tara li s-sistema tal-bini tivverifika li l-fajl ikun inbena u mbagħad iħaddem. Tara li d-dħul tal-komponent fuq il-klijent echo jindika li bagħat pakkett wieħed ta '1024 byte lis-server tal-echo 10.1.1.2. Int ukoll tara l-komponent tal-illoggjar fuq is-server tal-echo biex tgħid li rċeviet 1024 bytes minn 10.1.1.1. Is-server tal-echo jerġa’ jreġġa’ l-pakkett fis-skiet u tista’ tara fir-reġistru tal-klijent tal-echo li rċieva l-pakkett tiegħu lura mis-server.

4.3 ns-3 Kodiċi tas-sors

Issa li użajt xi wħud mill-helpers ns-3, tista 'tagħti ħarsa lejn uħud mill-kodiċi tas-sors li jimplimenta din il-funzjonalità. L-aħħar kodiċi tista' tara fuq is-server tal-web tagħna fil-link li ġej: https://gitlab.com/nsnam/ns-3-dev.git. Hemmhekk se tara l-paġna fil-qosor tal-Mercurial għas-siġra tal-iżvilupp tagħna ns-3. Fil-quċċata tal-paġna se tara diversi links,

summary | shortlog | changelog | graph | tags | files

Kompli u agħżel il-link tal-fajls. Dan huwa kif se jidher l-ogħla livell tal-biċċa l-kbira tar-repożitorji tagħna:

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 | annotate

L-iskripts eżempju tagħna jinsabu fid-direttorju eżempji. Jekk tikklikkja fuq l-eżempji se tara lista ta’ sottodirettorji. Wieħed mill-fajls fis-subdirettorju tutorja - first.cc... Jekk tikklikkja fuq l-ewwel.cc se tara l-kodiċi li għadek kif tgħallimt.

Il-kodiċi tas-sors jinsab prinċipalment fid-direttorju src. Tista' tara l-kodiċi tas-sors billi tikklikkja fuq l-isem tad-direttorju jew tikklikkja fuq il-link tal-fajls fuq il-lemin tal-isem tad-direttorju. Jekk tikklikkja fuq id-direttorju src, ikollok lista tas-sottodirettorji src. Jekk imbagħad tikklikkja fuq is-subdirettorju ewlieni, issib lista ta 'fajls. L-ewwel fajl li se tara (fil-ħin li tikteb din il-gwida) huwa abort.h. Jekk tikklikkja fuq il-link abort.h, inti tintbagħat lill-fajl tas-sors għal abort.h, li fih macros utli għall-ħruġ ta' skripts jekk jinstabu kundizzjonijiet anormali. Il-kodiċi tas-sors għall-helpers li użajna f'dan il-kapitlu jista' jinstab fid-direttorju src/Applikazzjonijiet/helper. Ħossok liberu li tpoġġi madwar is-siġra tad-direttorju biex tara x'inhu fejn u tifhem l-istil tal-programmi ns-3.

Sors: www.habr.com

Żid kumment