ns-3 mafunzo ya kiigaji cha mtandao. Sura ya 4

ns-3 mafunzo ya kiigaji cha mtandao. Sura ya 4
Sura ya 1,2
Sura ya 3

4 Muhtasari wa dhana
4.1 Vifupisho muhimu
4.1.1 Nodi
4.1.2 Maombi
4.1.3 Mkondo
4.1.4 Kifaa cha Mtandao
4.1.5 Wasaidizi wa kitolojia
4.2 Hati ya kwanza ya ns-3
4.2.1 Msimbo wa Boilerplate
4.2.2 Programu-jalizi
4.2.3 ns3 nafasi ya majina
4.2.4 Kukata miti
4.2.5 Kazi kuu
4.2.6 Kwa kutumia wasaidizi wa topolojia
4.2.7 Kutumia Maombi
4.2.8 Kiigaji
4.2.9 Kuunda hati yako
4.3 ns-3 Msimbo wa chanzo

Sura ya 4

Muhtasari wa dhana

Jambo la kwanza tunalohitaji kufanya kabla ya kuanza kujifunza au kuandika msimbo wa ns-3 ni kueleza dhana chache za kimsingi na vifupisho katika mfumo. Mengi ya haya yanaweza kuonekana wazi kwa wengine, lakini tunapendekeza kuchukua muda wa kusoma sehemu hii ili kuhakikisha kuwa unaanza kwenye msingi thabiti.

4.1 Vifupisho muhimu

Katika sehemu hii, tutaangalia baadhi ya istilahi ambazo hutumiwa sana kwenye wavuti lakini zina maana maalum katika ns-3.

4.1.1 Nodi

Katika jargon ya mtandao, kifaa cha kompyuta kinachounganishwa kwenye mtandao kinaitwa mwenyeji au wakati mwingine mfumo wa mwisho. Kwa sababu ns-3 ni kiigaji cha mtandao na si kiigaji cha Mtandao, kwa makusudi hatutumii neno seva pangishi, kwani hii inahusiana kwa karibu na Mtandao na itifaki zake. Badala yake, tunatumia neno la jumla zaidi, linalotumiwa pia na viigizaji vingine, ambalo linatokana na nadharia ya grafu: nodi (nodi).

Katika ns-3, uondoaji wa msingi wa kifaa cha kompyuta huitwa nodi. Uondoaji huu unawakilishwa katika C++ na darasa la Node. Darasa NodeNode (nodi) hutoa njia za kudhibiti uwasilishaji wa vifaa vya kompyuta katika masimulizi.

Lazima uelewe Node kama kompyuta ambayo unaweza kuongeza utendaji. Utaongeza vitu kama vile programu, rafu za itifaki, na kadi za pembeni zilizo na viendeshaji vinavyoruhusu kompyuta kufanya kazi muhimu. Tunatumia mfano sawa wa msingi katika ns-3.

4.1.2 Maombi

Kwa ujumla, programu ya kompyuta imegawanywa katika madarasa mawili makubwa. Programu ya mfumo hupanga rasilimali mbalimbali za kompyuta kama vile kumbukumbu, mizunguko ya kichakataji, diski, mtandao, n.k. kulingana na muundo fulani wa kompyuta. Programu ya mfumo kwa kawaida haitumii rasilimali hizi kufanya kazi zinazomnufaisha mtumiaji moja kwa moja. Mtumiaji kwa kawaida huendesha programu ili kufikia lengo mahususi, ambalo hupata na kutumia rasilimali zinazodhibitiwa na programu ya mfumo.

Mara nyingi mstari wa utengano kati ya mfumo na programu ya maombi hutolewa kwa mabadiliko ya kiwango cha upendeleo yanayotokea katika mitego ya mfumo wa uendeshaji. ns-3 haina dhana halisi ya mfumo wa uendeshaji na kwa hivyo hakuna dhana ya viwango vya upendeleo au simu za mfumo. Hata hivyo, tuna wazo la programu. Kama vile katika "ulimwengu halisi" programu za programu huendeshwa kwenye kompyuta kufanya kazi, programu za ns-3 huendesha nodi za ns-3 ili kudhibiti uigaji katika ulimwengu ulioiga.

Katika ns-3, muhtasari wa kimsingi wa programu ya mtumiaji ambayo hutoa shughuli fulani kwa uundaji wa muundo ni programu. Muhtasari huu unawakilishwa katika C++ na darasa la Maombi. Darasa la Maombi hutoa mbinu za kudhibiti maoni ya toleo letu la kiwango cha mtumiaji la programu katika uigaji. Wasanidi programu wanatarajiwa kutaalamu wa darasa la Maombi katika maana ya upangaji yenye mwelekeo wa kitu ili kuunda programu mpya. Katika somo hili, tutatumia utaalam wa darasa la Maombi linaloitwa UdpEchoClientApplication ΠΈ UdpEchoServerApplication. Kama unavyoweza kutarajia, programu tumizi hizi huunda seti ya programu za mteja/seva zinazotumiwa kutengeneza na kutoa mwangwi wa pakiti za mtandao.

4.1.3 Mkondo

Katika ulimwengu wa kweli, unaweza kuunganisha kompyuta kwenye mtandao. Mara nyingi vyombo vya habari ambavyo data hupitishwa katika mitandao hii huitwa chaneli. Unapochomeka kebo ya Ethaneti kwenye plagi ya ukutani, unaunganisha kompyuta yako kwenye kiungo cha Ethaneti. Katika ulimwengu wa ns-3 ulioiga, nodi imeunganishwa na kitu kinachowakilisha njia ya mawasiliano. Hapa, muhtasari wa kimsingi wa mtandao mdogo wa mawasiliano unaitwa chaneli na unawakilishwa katika C++ na darasa la Idhaa.

Hatari ChannelChannel hutoa mbinu za kudhibiti mwingiliano wa vitu vya subnet na kuunganisha majeshi kwao. Vituo vinaweza pia kuboreshwa na wasanidi programu katika maana ya upangaji inayolenga kitu. Utaalam wa kituo unaweza kuunda kitu rahisi kama waya. Kituo mahususi kinaweza pia kuiga mambo changamano kama vile swichi kubwa ya Ethaneti au nafasi ya pande tatu iliyojaa vizuizi katika hali ya mitandao isiyotumia waya.

Tutakuwa tukitumia matoleo maalum ya kituo katika mafunzo haya yanayoitwa CsmaChannelCsmaChannel, PointToPointChannelPointToPointChannel ΠΈ WifiChannelWifiChannel. CsmaChannel, kwa mfano, ni mfano wa toleo la subnet ya mawasiliano ambayo hutekeleza mazingira ya mawasiliano mengi ya ufikiaji wa hisia ya mtoa huduma. Hii inatupa utendakazi unaofanana na Ethaneti.

4.1.4 Kifaa cha Mtandao

Ilikuwa ni kwamba ikiwa ungependa kuunganisha kompyuta kwenye mtandao, unapaswa kununua cable maalum ya mtandao na kifaa cha vifaa kinachoitwa (katika istilahi ya PC) kadi ya pembeni ambayo inahitajika kuingizwa kwenye kompyuta. Ikiwa kadi ya pembeni ilitekeleza baadhi ya kazi za mtandao, ziliitwa kadi za interface za mtandao au kadi za mtandao. Leo, kompyuta nyingi huja na maunzi ya kiolesura cha mtandao kilichounganishwa na hazionekani na watumiaji kama vifaa tofauti.

Kadi ya mtandao haitafanya kazi bila dereva wa programu ambayo inadhibiti vifaa vyake. Katika Unix (au Linux), kipande cha vifaa vya pembeni huainishwa kama kifaa. Vifaa vinadhibitiwa kwa kutumia viendeshi vya kifaa, na vifaa vya mtandao (NICs) vinadhibitiwa kwa kutumia viendeshi vya vifaa vya mtandao (madereva ya kifaa cha mtandao) na kwa pamoja huitwa vifaa vya mtandao (vifaa vya mtandao) Katika Unix na Linux, unarejelea vifaa vya mtandao kwa majina kama vile eth0.

Katika ns-3, uondoaji wa kifaa cha mtandao unajumuisha programu ya kiendeshi na maunzi yanayotengenezwa. Katika simulation, kifaa cha mtandao "kimewekwa" kwenye node ili kuruhusu kuwasiliana na nodes nyingine kupitia njia. Kama vile kompyuta halisi, nodi inaweza kuunganishwa kwa chaneli nyingi kupitia vifaa vingi NetDevices.

Muhtasari wa mtandao wa kifaa unawakilishwa katika C++ na darasa NetDevice. Darasa NetDevice hutoa mbinu za kusimamia miunganisho kwa vitu vya Node na Channel; na inaweza kuwa maalum na watengenezaji kwa maana ya upangaji unaolenga kitu. Katika somo hili tutatumia matoleo kadhaa maalum ya NetDevice inayoitwa CsmaNetDevice, PointToPointNetDevice ΠΈ WifiNetDevice. Kama vile adapta ya mtandao ya Ethaneti imeundwa kufanya kazi na mtandao Ethernet, CsmaNetDevice iliyoundwa kufanya kazi nayo CsmaChannel, PointToPointNetDevice iliyoundwa kufanya kazi nayo PointToPointChannelNa WifiNetDevice - iliyoundwa kufanya kazi nayo WifiChannel.

4.1.5 Wasaidizi wa kitolojia

Katika mtandao halisi, utapata kompyuta mwenyeji na kadi za mtandao zilizoongezwa (au zilizojengwa ndani). Katika ns-3 tungesema kwamba utaona nodi zilizo na NetDevices zilizoambatishwa. Katika mtandao mkubwa wa kuiga, utahitaji kuandaa miunganisho kati ya vitu vingi Node, NetDevice ΠΈ channel.

Tangu kuunganisha NetDevices kwa nodi, NetDevices kwa viungo, kugawa anwani za IP, nk. katika ns-3 ni kazi ya kawaida, kufanya hili rahisi iwezekanavyo tunatoa wanaoitwa wasaidizi wa topolojia. Kwa mfano, ili kuunda NetDevice, unahitaji kufanya shughuli nyingi za ns-3 kernel, kuongeza anwani ya MAC, kufunga kifaa cha mtandao kwenye Node, kusanidi stack ya itifaki ya nodi, na kisha kuunganisha NetDevice kwenye Channel. Kazi zaidi itahitajika ili kuunganisha vifaa vingi kwenye viungo vingi na kisha kuunganisha mitandao ya mtu binafsi kwenye mtandao wa Internetworks. Tunatoa vifaa vya usaidizi wa topolojia ambavyo vinachanganya shughuli hizi nyingi katika muundo rahisi kutumia kwa urahisi wako.

4.2 Hati ya kwanza ya ns-3

Ikiwa ulisakinisha mfumo kama ilivyopendekezwa hapo juu, utakuwa na ns-3 kutolewa kwenye saraka inayoitwa repos kwenye saraka yako ya nyumbani. Nenda kwenye saraka kutolewa

Ikiwa huna saraka kama hii, inamaanisha kuwa haukubainisha saraka ya pato wakati wa kuunda toleo la ns-3, jenga kama hii:
$ ./waf sanidi -build-profile=release -out=build/release,
$ ./waf kujenga

hapo unapaswa kuona muundo wa saraka sawa na ufuatao:

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

Nenda kwenye saraka mifano/mafunzo. Unapaswa kuona faili iliyoko hapo inayoitwa kwanza.cc. Hii ni hati ambayo itaunda muunganisho rahisi wa kumweka-kwa-uhakika kati ya nodi mbili na kupitisha pakiti moja kati ya nodi. Wacha tuangalie hati hii kwa mstari; ili kufanya hivi, fungua first.cc katika kihariri chako unachokipenda.

4.2.1 Msimbo wa Boilerplate
Mstari wa kwanza katika faili ni mstari wa modi ya mhariri emacs. Inaeleza emacs kuhusu kanuni za uumbizaji (mtindo wa usimbaji) tunaotumia katika msimbo wetu wa chanzo.

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

Hili daima ni suala la utata, kwa hivyo tunahitaji kuweka rekodi moja kwa moja ili kuiondoa njiani mara moja. Mradi wa ns-3, kama miradi mingi mikubwa, umetumia mtindo wa usimbaji ambao msimbo wote uliochangiwa lazima ufuate. Ikiwa unataka kuchangia nambari yako kwenye mradi, mwishowe itabidi ufuate kiwango cha utunzi cha ns-3, kama ilivyoelezewa kwenye faili. doc/codingstd.txt au kuonyeshwa kwenye ukurasa wa wavuti wa mradi: https://www.nsnam.org/develop/contributing-code/coding-style/.

Tunapendekeza uzoeane na mwonekano na msimbo wa ns-3 na utumie kiwango hiki wakati wowote unapofanya kazi na msimbo wetu. Timu nzima ya maendeleo na wachangiaji walikubali hili baada ya kunung'unika. Mstari wa modi ya emacs hapo juu hurahisisha kufomati ipasavyo ikiwa unatumia kihariri cha emacs.

Kiigaji cha ns-3 kimeidhinishwa kwa kutumia GNU General Public License. Utaona kichwa halali cha GNU katika kila faili ya usambazaji ya ns-3. Mara nyingi utaona notisi ya hakimiliki kwa mojawapo ya taasisi zinazoshiriki katika mradi wa ns-3 juu ya maandishi na mwandishi wa GPL, iliyoonyeshwa hapa chini.

/* 
* 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 Programu-jalizi

Nambari yenyewe huanza na safu ya taarifa za ujumuishaji (ni pamoja na).

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

Ili kuwasaidia watumiaji wetu wa uandishi wa kiwango cha juu kukabiliana na idadi kubwa ya faili za vichwa vilivyopo kwenye mfumo, tunazipanga kulingana na matumizi yake katika moduli kubwa. Tunatoa faili moja ya kichwa ambayo itapakia kwa kurudia faili zote za kichwa zinazotumiwa katika moduli fulani. Badala ya kutafuta ni kichwa gani hasa unachohitaji na ikiwezekana kupata orodha sahihi ya vitegemezi, tunakupa uwezo wa kupakua kikundi cha faili kwa uzito mkubwa. Sio njia bora zaidi, lakini kwa hakika hurahisisha sana uandishi.

Kila moja ya ns-3 ni pamoja na faili zimewekwa kwenye saraka inayoitwa ns3 (jenga saraka ndogo) ili kuzuia migogoro ya jina la faili wakati wa mchakato wa ujenzi. Faili ns3/moduli-msingi.h inalingana na moduli ya ns-3, ambayo utapata kwenye saraka src/msingi katika toleo ulilosakinisha. Katika orodha ya saraka hii utapata idadi kubwa ya faili za kichwa. Unapofanya kusanyiko, Waf huweka faili za vichwa vya umma kwenye saraka ya ns3 kwenye saraka ndogo jenga/rekebisha

Ikiwa huna saraka kama hii, inamaanisha kuwa haukubainisha saraka ya pato wakati wa kuunda toleo la ns-3, jenga kama hii:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf kujenga
au
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf kujenga

au kujenga/imeboreshwa, kulingana na usanidi wako. Waf pia itatoa kiotomatiki moduli pamoja na faili ya kupakia faili zote za vichwa vya umma. Kwa kuwa bila shaka unafuata mwongozo huu kidini, tayari umefanya

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

kusanidi mradi wa kuendesha miundo ya utatuzi inayojumuisha mifano na majaribio. Wewe pia ulifanya

$ ./waf

kuunganisha mradi. Hivyo sasa wakati ukiangalia katika directory ../../build/debug/ns3, basi huko utapata, kati ya wengine, faili za kichwa cha moduli nne zilizoonyeshwa hapo juu. Unaweza kuangalia yaliyomo kwenye faili hizi na kugundua kuwa zinajumuisha faili zote za umma zinazotumiwa na moduli zinazolingana.

4.2.3 ns3 nafasi ya majina

Mstari unaofuata katika hati kwanza.cc ni tamko la nafasi ya majina.

using namespace ns3;

Mradi wa ns-3 unatekelezwa katika nafasi ya majina ya C++ inayoitwa ns3. Hii inakusanya matamko yote yanayohusiana na ns-3 katika mawanda nje ya nafasi ya majina ya kimataifa, ambayo kwa matumaini yatasaidia kuunganishwa na msimbo mwingine. Kutumia opereta wa C++ huleta nafasi ya majina ya ns-3 katika eneo la sasa la tangazo (la kimataifa). Hii ni njia dhahania ya kusema kwamba baada ya tamko hili, hutahitaji kuchapa ns3::opereta wa ruhusa ya wigo kabla ya msimbo wako wote wa ns-3 kuitumia. Ikiwa haujui nafasi za majina, rejelea karibu kitabu chochote cha maandishi cha C++ na ulinganishe nafasi ya majina ya ns3 kwa kutumia nafasi ya majina ya std na tamko. using namespace std; katika mifano ya kufanya kazi na opereta wa pato gharama na vijito.

4.2.4 Kukata miti

Mstari unaofuata wa hati ni,

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Tutatumia taarifa hii kama mahali pazuri pa kujadili mfumo wetu wa uhifadhi wa hati Doksijeni. Ukiangalia tovuti ya mradi wa ns-3, utapata kiungo cha Nyaraka kwenye upau wa kusogeza. Ukibofya kiungo hiki utapelekwa kwenye ukurasa wetu wa hati. Kuna kiungo cha "Toleo la Hivi Punde" kitakachokupeleka kwenye hati za toleo thabiti la ns-3. Ukichagua kiungo cha "Hati za API", utapelekwa kwenye ukurasa wa nyaraka wa ns-3 API.

Upande wa kushoto wa ukurasa utapata uwakilishi wa kielelezo wa muundo wa nyaraka. Mahali pazuri pa kuanzia ni "kitabu" cha Moduli ns-3 kwenye mti wa kusogeza wa ns-3. Ikiwa utafunua modules, utaona orodha ya nyaraka za moduli za ns-3. Kama ilivyojadiliwa hapo juu, dhana ya moduli hapa inahusiana moja kwa moja na faili zilizojumuishwa kwenye moduli hapo juu. Mfumo mdogo wa ukataji miti wa ns-3 unajadiliwa katika sehemu Kwa kutumia Moduli ya Kuingia, kwa hivyo tutairudia baadaye katika mafunzo haya, lakini unaweza kujifunza kuhusu kauli iliyo hapo juu kwa kuangalia moduli. Corena kisha kufungua kitabu Zana za kurekebishana kisha kuchagua ukurasa Logging. Bonyeza Logging.

Unapaswa sasa kukagua hati Doksijeni kwa moduli Logging. Katika orodha ya macros juu ya ukurasa, utaona ingizo la NS_LOG_COMPONENT_DEFINE. Kabla ya kubofya kiungo, hakikisha uangalie "Maelezo ya Kina" ya moduli ya usajili ili kuelewa jinsi inavyofanya kazi kwa ujumla. Ili kufanya hivyo unaweza kusogeza chini au uchague "Zaidi..." chini ya chati.

Mara tu unapopata wazo la jumla la kile kinachoendelea, endelea na uangalie hati za NS_LOG_COMPONENT_DEFINE mahususi. Sitatoa nakala hapa, lakini kwa muhtasari, mstari huu unatangaza sehemu ya usajili inayoitwa. Mfano wa FirstScript, ambayo hukuruhusu kuwezesha au kuzima uwekaji kumbukumbu wa jumbe kwa kurejelea jina.

4.2.5 Kazi kuu

Katika mistari ifuatayo ya hati utaona,

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

Hili ni tamko la kazi kuu ya programu yako (hati). Kama ilivyo kwa programu yoyote ya C++, unahitaji kufafanua kazi kuu, hii inatekelezwa kwanza. Hakuna kitu maalum hapa. Hati yako ya ns-3 ni programu ya C++ tu. Mstari ufuatao unaweka azimio la wakati kuwa nanosecond 1, ambayo ni chaguo-msingi:

Time::SetResolution (Time::NS);

Azimio la wakati, au azimio kwa urahisi, ndiyo thamani ndogo zaidi ya wakati inayoweza kutumika (tofauti ndogo kabisa inayoweza kuwakilishwa kati ya nyakati mbili). Unaweza kubadilisha azimio mara moja. Utaratibu ambao hutoa unyumbulifu huu hutumia kumbukumbu, kwa hivyo mara tu azimio limewekwa wazi, tunafungua kumbukumbu, kuzuia sasisho zaidi. (Usipoweka azimio kwa uwazi, litabadilika kuwa nanosecond moja na kumbukumbu itaachiliwa wakati simulizi itaanza.)

Mistari miwili ifuatayo ya hati inatumika kuwezesha vipengee viwili vya ukataji miti ambavyo vimejengwa kwenye programu EchoClient ΠΈ EchoServer:

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

Ukisoma nyaraka za kipengele cha Kuweka Magogo, utaona kwamba kuna viwango kadhaa vya ukataji miti/granularity ambavyo unaweza kuwezesha kwenye kila sehemu. Mistari hii miwili ya msimbo huwezesha ukataji wa utatuzi kwa kiwango cha INFO kwa wateja na seva za mwangwi. Katika kiwango hiki, programu itachapisha ujumbe inapotuma na kupokea pakiti wakati wa kuiga.

Sasa tutaingia kwenye biashara ya kuunda topolojia na kuendesha simulation. Tunatumia vitu vya msaidizi wa topolojia kufanya kazi hii iwe rahisi iwezekanavyo.

4.2.6 Kwa kutumia wasaidizi wa topolojia

Mistari miwili ifuatayo ya msimbo kwenye hati yetu itaunda vitu vya Node ns-3 ambavyo vitawakilisha kompyuta kwenye simulation.

NodeContainer nodes;
nodes.Create (2);

Kabla hatujaendelea, wacha tupate hati za darasa NodeContainer. Njia nyingine ya kupata hati za darasa fulani ni kupitia tabo madarasa kwenye kurasa Doksijeni. Ikiwa tayari umefungua Doksijeni, tembeza tu hadi juu ya ukurasa na uchague kichupo cha Madarasa. Unapaswa kuona seti mpya ya tabo, moja ambayo ni orodha ya madarasa. Chini ya kichupo hiki utaona orodha ya madarasa yote ya ns-3. Tembeza chini hadi ns3::NodeContainer. Unapopata darasa, lichague ili kwenda kwenye hati za darasa.

Kama tunavyokumbuka, moja ya vifupisho vyetu muhimu ni nodi. Inawakilisha kompyuta ambayo tutaongeza vitu kama vile rafu za itifaki, programu na kadi za pembeni. Msaidizi wa Topolojia NodeContainer hutoa njia rahisi ya kuunda, kudhibiti na kufikia vitu vyovyote Node, ambayo tunaunda ili kuendesha simulation. Mstari wa kwanza hapo juu unatangaza tu NodeContainer, ambayo tunaita nodi. Mstari wa pili huita njia ya Unda kwenye kitu cha nodi na kuuliza chombo kuunda nodi mbili. Kama ilivyoelezwa katika Doksijeni, kontena huomba mfumo wa ns-3 kuunda vitu viwili Node na huhifadhi viashiria kwa vitu hivi ndani.

Nodi zilizoundwa kwenye hati hazifanyi chochote bado. Hatua inayofuata katika kujenga topolojia ni kuunganisha nodi zetu kwenye mtandao. Njia rahisi zaidi ya mtandao tunayotumia ni muunganisho wa uhakika kati ya nodi mbili. Sasa tutaunda muunganisho kama huo.

PointToPointHelper

Tunaunda muunganisho wa uhakika kwa uhakika kwa kutumia mchoro unaojulikana, kwa kutumia kitu cha msaidizi wa topolojia kufanya kazi ya kiwango cha chini inayohitajika kwa muunganisho. Kumbuka kwamba vifupisho vyetu viwili muhimu NetDevice ΠΈ channel. Katika ulimwengu halisi, maneno haya takriban yanahusiana na kadi za pembeni na nyaya za mtandao. Kwa kawaida, mambo haya mawili yanahusiana kwa karibu, na hakuna mtu anayeweza kutegemea kugawana, kwa mfano, vifaa Ethernet juu ya chaneli isiyo na waya. Wasaidizi wetu wa topolojia hufuata uhusiano huu wa karibu na kwa hivyo utatumia kitu kimoja katika hali hii PointToPointHelper kwa kuanzisha na kuunganisha vitu vya ns-3 PointToPointNetDevice ΠΈ PointToPointChannel. Mistari mitatu ifuatayo kwenye hati:

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

Mstari wa kwanza,

PointToPointHelper pointToPoint;

huunda mfano wa kitu kwenye safu PointToPointHelper. Kutoka kwa mtazamo wa kiwango cha juu mstari ufuatao,

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

inaambia kitu PointToPointHelper tumia thamani "5 Mbit/s" (megabiti tano kwa sekunde) kama "Kiwango cha Data'.

Kutoka kwa mtazamo maalum zaidi, kamba "DataRate" inalingana na kile tunachokiita sifa PointToPointNetDevice. Ukiangalia Doksijeni kwa darasa ns3::PointToPointNetDevice na katika nyaraka za mbinu GetTypeId utapata orodha ya sifa zilizoainishwa kwa kifaa. Miongoni mwao kutakuwa na sifa "Kiwango cha Data" Vitu vingi vya ns-3 vinavyoonekana na mtumiaji vina orodha sawa za sifa. Tunatumia utaratibu huu kwa urahisi kuanzisha simulation bila recompilation, kama utaona katika sehemu inayofuata.

Sawa na "Kiwango cha Data" katika PointToPointNetDevice, utapata sifa ya "Delay" inayohusishwa na PointToPointChannel. Mstari wa mwisho

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

anasema PointToPointHelper tumia thamani "2 ms" (millisekunde mbili) kama thamani ya kucheleweshwa kwa uenezi kwa kiungo cha uhakika hadi hatua ambacho huunda baadaye.

NetDeviceContainer

Kwa sasa tunayo kwenye hati NodeContainer, ambayo ina nodi mbili. Tuna PointToPointHelper, ambayo imeandaliwa kwa ajili ya kuunda vitu PointToPointNetDevices na kuziunganisha kwa kutumia kitu cha PointToPointChannel. Kama vile tulivyotumia kitu cha msaidizi wa topolojia ya NodeContainer kuunda nodi, tutauliza PointToPointHelper utufanyie kazi inayohusiana na uundaji, usanidi na usakinishaji wa vifaa vyetu. Tunahitaji orodha ya vitu vyote vilivyoundwa NetDevice, kwa hivyo tunatumia NetDeviceContainer kuzihifadhi kwa njia ile ile tuliyotumia NodeContainer kuhifadhi nodi tulizounda. Mistari miwili inayofuata ya kanuni,

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

kukamilisha kifaa na usanidi wa kituo. Mstari wa kwanza unatangaza chombo cha kifaa kilichotajwa hapo juu, na pili hufanya kazi kuu. Njia Kufunga kituo PointToPointHelper anakubali NodeContainer kama kigezo. Ndani NetDeviceContainer kwa kila nodi iliyoko ndani NodeContainer imeundwa (kwa mawasiliano ya uhakika lazima kuwe na mawili kati yao) PointToPointNetDevice inaundwa na kuhifadhiwa kwenye chombo cha kifaa. PointToPointChannel imeumbwa na mbili zimeshikamana nayo PointToPointNetDevices. Baada ya kuunda vitu, sifa huhifadhiwa ndani PointToPointHelper, hutumiwa kuanzisha sifa zinazolingana katika vitu vilivyoundwa.

Baada ya kupiga simu pointToPoint.Sakinisha (nodi) tutakuwa na nodi mbili, kila moja ikiwa na kifaa cha mtandao cha uhakika-kwa-hatua kilichowekwa na kiungo kimoja cha uhakika kati yao. Vifaa vyote viwili vitasanidiwa ili kusambaza data kwa kasi ya megabiti tano kwa sekunde na kucheleweshwa kwa utumaji wa milisekunde mbili kwenye chaneli.

InternetStackHelper

Sasa tuna nodi na vifaa vilivyosanidiwa, lakini nodi zetu hazina rafu za itifaki zilizosakinishwa. Mistari miwili ifuatayo ya msimbo itashughulikia hili.

InternetStackHelper stack;
stack.Install (nodes);

InternetStackHelper - ni msaidizi wa topolojia kwa rafu za Mtandao, sawa na PointToPointHelper kwa vifaa vya mtandao vya uhakika kwa uhakika. Njia Kufunga inachukua NodeContainer kama parameta. Ikitekelezwa, itasakinisha rafu ya Mtandao (TCP, UDP, IP, n.k.) kwenye kila nodi ya kontena.

IPv4AdressHelper

Kisha tunahitaji kuhusisha vifaa vyetu na anwani za IP. Tunatoa msaidizi wa topolojia ili kudhibiti ugawaji wa anwani za IP. API pekee inayoonekana kwa mtumiaji ni kuweka anwani ya IP ya msingi na mask ya kutumia wakati wa kufanya usambazaji halisi wa anwani (hii inafanywa kwa kiwango cha chini ndani ya msaidizi). Mistari miwili ifuatayo ya nambari katika hati yetu ya mfano kwanza.cc,

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

tangaza kitu cha msaidizi wa anwani na uiambie kwamba inapaswa kuanza kugawa anwani za IP kutoka kwa mtandao 10.1.1.0, kwa kutumia bitmask 255.255.255.0 kuamua. Kwa chaguo-msingi, anwani zilizotengwa zitaanza kwa moja na kuongezeka kwa monotonically, hivyo anwani ya kwanza iliyotolewa kutoka kwa msingi huu itakuwa 10.1.1.1, kisha 10.1.1.2, nk. Kwa kweli, kwa kiwango cha chini, mfumo wa ns-3 unakumbuka anwani zote za IP zilizotengwa na hutoa kosa mbaya ikiwa utaunda kwa bahati mbaya hali ambayo anwani hiyo hiyo inatolewa mara mbili (kwa njia, kosa hili ni ngumu kurekebisha).

Mstari ufuatao wa kanuni,

Ipv4InterfaceContainer interfaces = address.Assign (devices);

hufanya kazi halisi ya anwani. Katika ns-3 tunaanzisha muunganisho kati ya anwani ya IP na kifaa kinachotumia kitu Kiolesura cha IPv4. Kama vile wakati mwingine tunahitaji orodha ya vifaa vya mtandao vilivyoundwa na msaidizi kwa matumizi ya baadaye, wakati mwingine tunahitaji orodha ya vitu Kiolesura cha IPv4. IPv4InterfaceContainer hutoa utendaji huu.

Tuliunda mtandao wa uhakika-kwa-uhakika, na rafu zilizosakinishwa na anwani za IP zilizopewa. Sasa tunahitaji programu katika kila nodi ili kutoa trafiki.

4.2.7 Kutumia Maombi

Mwingine wa vifupisho kuu vya mfumo wa ns-3 ni Maombi (maombi). Katika hali hii tunatumia utaalam wa darasa mbili za msingi Maombi ns-3 inaitwa UdpEchoServerApplication ΠΈ UdpEchoClientApplication. Kama katika visa vya awali, tunatumia vitu vya msaidizi kusanidi na kudhibiti vitu vya msingi. Hapa tunatumia UdpEchoServerHelper ΠΈ UdpEchoClientHelper vitu ili kurahisisha maisha yetu.

UdpEchoServerHelper

Mistari ifuatayo ya msimbo katika hati yetu ya mfano wa first.cc inatumiwa kusanidi programu ya seva ya mwangwi ya UDP kwenye mojawapo ya nodi tulizounda awali.

UdpEchoServerHelper echoServer (9);

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

Mstari wa kwanza wa msimbo katika kijisehemu kilicho hapo juu huunda UdpEchoServerHelper. Kama kawaida, hii sio programu yenyewe, ni kitu kinachotusaidia kuunda programu halisi. Moja ya makusanyiko yetu ni kupitisha sifa zinazohitajika kwa mjenzi wa kitu cha msaidizi. Katika kesi hii, msaidizi hawezi kufanya chochote muhimu isipokuwa amepewa nambari ya bandari ambayo seva itasikiliza pakiti, nambari hii lazima pia ijulikane kwa mteja. Katika kesi hii, tunapitisha nambari ya bandari kwa mjenzi msaidizi. Mjenzi, kwa upande wake, hufanya tu SetAttribute na thamani iliyopitishwa. Baadaye, ikiwa inataka, unaweza kutumia SetAttribute kuweka thamani tofauti ya sifa ya Bandari.

Kama vitu vingine vingi vya msaidizi, kitu UdpEchoServerHelper ina mbinu Kufunga. Utekelezaji wa njia hii kwa ufanisi huunda programu ya msingi ya seva ya mwangwi na kuifunga kwa seva pangishi. Kushangaza, mbinu Kufunga anakubali NodeContainer kama parameta kama zile zingine Kufunga mbinu tumeziona.

Uongofu kamili wa C++ unaofanya kazi hapa huchukua matokeo ya mbinu nodi.Pata(1) (ambayo inarudisha pointer smart kwa kitu cha nodi - Ptr ) na huitumia katika mjenzi kwa kitu kisichojulikana NodeContainerambayo kisha hupitishwa kwa njia Kufunga. Iwapo huwezi kuamua katika msimbo wa C++ ni saini ya njia ipi inakusanywa na kutekelezwa, basi angalia kati ya ubadilishaji kamili.

Sasa tunaona hilo echoServer.Sakinisha kuhusu kusakinisha programu UdpEchoServerApplication kwenye kupatikana ndani NodeContainerambayo tunatumia kusimamia nodi zetu, nodi na index 1. Mbinu Kufunga itarudisha kontena ambalo lina viashiria kwa programu zote (katika kesi hii moja, kwani tulipitisha jina lisilojulikana NodeContainer, iliyo na nodi moja) iliyoundwa na msaidizi.

Programu zinahitaji kubainisha wakati wa kuanza kuzalisha trafiki "anza" na inaweza kuhitaji kutaja zaidi wakati wa kuisimamisha "acha". Tunatoa chaguzi zote mbili. Nyakati hizi zimewekwa kwa kutumia mbinu Chombo cha Maombi Mwanzo ΠΈ Kuacha. Njia hizi zinakubali vigezo vya aina Wakati. Katika kesi hii tunatumia mlolongo dhahiri wa ubadilishaji wa C++ kuchukua C++ mara mbili 1.0 na uibadilishe kuwa kitu cha Muda cha tns-3 kinachotumia kitu cha Seconds kubadilisha hadi sekunde. Kumbuka kuwa sheria za ubadilishaji zinaweza kudhibitiwa na mwandishi wa mfano, na C++ ina sheria zake, kwa hivyo huwezi kutegemea kila wakati vigezo vinavyobadilishwa jinsi ulivyotarajia. Mistari miwili

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

itasababisha utumizi wa seva ya mwangwi kuanza (kuwasha kiotomatiki) sekunde moja baada ya simulation kuanza na kuacha (kuzima) baada ya sekunde kumi za simulizi. Kwa sababu ya ukweli kwamba tulitangaza tukio la kuiga (tukio la kusimamisha programu), ambalo litatekelezwa katika sekunde kumi, angalau sekunde kumi za uendeshaji wa mtandao zitaigwa.

UdpEchoClientHelper

Maombi ya mteja miss ya imeundwa kwa njia inayokaribia kufanana na seva. Kuna kitu cha msingi UdpEchoClientApplication, ambayo inadhibitiwa
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));;

Walakini, kwa mteja wa mwangwi tunahitaji kuweka sifa tano tofauti. Sifa mbili za kwanza zimewekwa wakati wa uumbaji UdpEchoClientHelper. Tunapitisha vigezo vinavyotumiwa (ndani ya msaidizi) ili kuweka sifa "Anwani ya Mbali" ΠΈ "RemotePort" kwa mujibu wa makubaliano yetu ya kupitisha vigezo muhimu kwa mjenzi msaidizi.

Tukumbuke kuwa tulitumia IPv4InterfaceContainer kufuatilia anwani za IP ambazo tumekabidhi kwa vifaa vyetu. Kiolesura batili katika kontena ya violesura italingana na anwani ya IP ya nodi batili kwenye kontena ya vifundo. Kiolesura cha kwanza katika chombo cha violesura kinalingana na anwani ya IP ya nodi ya kwanza kwenye chombo cha nodi. Kwa hiyo, katika mstari wa kwanza wa kanuni (hapo juu), tunaunda msaidizi na kuwaambia kuwa anwani ya kijijini ya mteja itakuwa anwani ya IP iliyotolewa kwa mwenyeji ambapo seva iko. Pia tunasema kwamba tunahitaji kupanga pakiti kutumwa kwenye bandari tisa.

Sifa ya "MaxPackets" humwambia mteja idadi ya juu zaidi ya pakiti tunazoweza kutuma wakati wa uigaji. Sifa ya "Interval" humwambia mteja muda wa kusubiri kati ya pakiti, na sifa ya "PacketSize" humwambia mteja jinsi mzigo wa pakiti unapaswa kuwa mkubwa. Kwa mchanganyiko huu wa sifa tunamwambia mteja kutuma pakiti moja ya 1024-byte.

Kama ilivyo kwa seva ya mwangwi, tunaweka sifa za mteja wa mwangwi Mwanzo ΠΈ Kuacha, lakini hapa tunaanza mteja pili baada ya seva kugeuka (sekunde mbili baada ya kuanza kwa simulation).

4.2.8 Kiigaji

Katika hatua hii tunahitaji kuendesha simulation. Hii inafanywa kwa kutumia kazi ya kimataifa Mwigizaji::Kimbia.

Simulator::Run ();

Wakati tuliita njia hapo awali,

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

tulipanga matukio katika kiigaji kwa sekunde 1,0, sekunde 2,0 na matukio mawili kwa sekunde 10,0. Baada ya simu Mwigizaji::Kimbia, mfumo utaanza kutazama orodha ya matukio yaliyopangwa na kuyatekeleza. Itawasha tukio kwanza baada ya sekunde 1,0, ambayo itaanzisha programu ya seva ya mwangwi (tukio hili linaweza kuratibu matukio mengine mengi). Kisha itawasha tukio lililopangwa kwa sekunde t=2,0 ambalo litazindua programu ya mteja wa mwangwi. Tena, tukio hili linaweza kuwa na matukio mengi zaidi yaliyopangwa. Utekelezaji wa tukio la kuanza katika mteja wa mwangwi utaanza awamu ya kuhamisha data ya uigaji kwa kutuma pakiti kwa seva.

Kitendo cha kutuma pakiti kwa seva kitaanzisha msururu wa matukio ambayo yataratibiwa kiotomatiki nyuma ya pazia na ambayo itatekeleza mbinu za kutuma pakiti ya mwangwi kulingana na vigezo vya muda ambavyo tumeweka kwenye hati.

Kama matokeo, kwa kuwa tunatuma pakiti moja tu (kumbuka, sifa MaxPackets iliwekwa kuwa moja), mlolongo wa matukio ulioanzishwa na ping hii ya mteja mmoja utaisha na uigaji utaingia katika hali ya kusubiri. Hili likitokea, matukio yaliyosalia yaliyopangwa yatakuwa matukio Kuacha kwa seva na mteja. Matukio haya yanapotekelezwa, hakutakuwa na matukio yoyote yaliyosalia kwa usindikaji zaidi na Mwigizaji::Kimbia itarudisha udhibiti. Uigaji umekamilika.

Kinachobaki ni kujisafisha mwenyewe. Hii inafanywa kwa kupiga simu kazi ya kimataifa Mwimbaji::haribu. Kwa sababu kazi za msaidizi (au kiwango cha chini ns-3 code) ziliitwa, ambazo zimepangwa ili ndoano ziingizwe kwenye simulator ili kuharibu vitu vyote vilivyoundwa. Hukuhitaji kufuatilia chochote kati ya vitu hivi mwenyewe - ulichohitaji kufanya ni kupiga simu Mwimbaji::haribu na kwenda nje. Mfumo wa ns-3 utakufanyia kazi hii ngumu. Mistari iliyosalia ya hati yetu ya kwanza ya ns-3, first.cc, fanya hivyo tu:

Simulator::Destroy ();
return 0;
}

Simulator itaacha lini?

ns-3 ni kiigaji cha tukio tofauti (DE). Katika kiigaji kama hiki, kila tukio huhusishwa na muda wake wa utekelezaji, na uigaji huendelea kwa kuchakata matukio kwa mpangilio yanapotokea kadiri uigaji unavyoendelea. Matukio yanaweza kusababisha matukio ya siku zijazo kuratibiwa (kwa mfano, kipima muda kinaweza kujipanga upya ili kumaliza kuhesabu katika muda unaofuata).

Matukio ya awali kwa kawaida huanzishwa na huluki, kwa mfano IPv6 itaratibu ugunduzi wa huduma kwenye mtandao, maombi ya jirani, n.k. Programu hupanga tukio la kutuma pakiti ya kwanza, na kadhalika. Tukio linapochakatwa, linaweza kutoa sifuri, tukio moja au zaidi. Uigaji unavyoendelea, matukio hutokea, ama kumalizika au kuunda mpya. Uigaji utaacha kiotomatiki ikiwa foleni ya tukio ni tupu au tukio maalum limegunduliwa Kuacha. Tukio Kuacha yanayotokana na kazi Mwimbaji::Simamisha (wakati wa kuacha).

Kuna kisa cha kawaida ambapo Simulator::Komesha ni muhimu kabisa ili kukomesha uigaji: wakati kuna matukio ya kujiendeleza. Matukio ya kujitegemea (au kurudia) ni matukio ambayo hupangwa upya kila wakati. Kwa hivyo, daima huweka foleni ya tukio bila tupu. Kuna itifaki nyingi na moduli zilizo na matukio ya kurudia, kwa mfano:

β€’ FlowMonitor - kuangalia mara kwa mara kwa pakiti zilizopotea;

β€’ RIPng - matangazo ya mara kwa mara ya masasisho ya jedwali la uelekezaji;

β€’ na kadhalika.

Katika hali kama hizo Mwimbaji::Simamisha muhimu kusimamisha simulation kwa usahihi. Zaidi ya hayo, wakati ns-3 iko katika hali ya kuiga, RealtimeSimulator hutumiwa kusawazisha saa ya kuiga na saa ya mashine, na Mwimbaji::Simamisha muhimu kusimamisha mchakato.

Programu nyingi za kuiga kwenye kitabu cha maandishi haziita Mwimbaji::Simamisha kwa uwazi, kwa kuwa huisha kiotomati wakati matukio yaliyowekwa kwenye foleni yamekamilika. Hata hivyo, programu hizi pia zitakubali Simulator::Komesha simu. Kwa mfano, taarifa ifuatayo ya ziada katika mpango wa mfano wa kwanza itaratibu kusimama kwa njia ya wazi kwa sekunde 11:

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

Yaliyo hapo juu hayatabadilisha tabia ya programu hii, kwani simulizi hili huisha baada ya sekunde 10. Lakini ikiwa ungebadilisha muda wa kusimama katika taarifa iliyo hapo juu kutoka sekunde 11 hadi sekunde 1, ungegundua kwamba simulation inasimama kabla ya matokeo yoyote kugonga skrini (kwani matokeo hutokea baada ya sekunde 2 za muda wa kuiga).

Ni muhimu kupiga simu Simulator::Simama kabla ya kupiga simu Simulator::Run; la sivyo Simulator::Endesha huenda usirudishe udhibiti kwenye programu kuu ili kutekeleza kusitisha!

4.2.9 Kuunda hati yako

Tumefanya uundaji wa hati zako rahisi kuwa jambo dogo. Unachohitajika kufanya ni kuweka hati yako kwenye saraka ya mwanzo na itajengwa kiotomatiki ikiwa utaendesha Waf. Tujaribu. Rudi kwenye saraka ya kiwango cha juu na unakili mifano/mafunzo/kwanza.cc kwa katalogi scratch

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

Sasa tengeneza hati yako ya kwanza ya sampuli ukitumia waf:

$ ./waf

Unapaswa kuona ujumbe unaoonyesha kuwa mfano wako wa kwanza uliundwa kwa ufanisi.

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)

Sasa unaweza kuendesha mfano (kumbuka kuwa ikiwa utaunda programu yako kwenye saraka ya mwanzo, basi lazima uikimbie kutoka scratch):

$ ./waf --run scratch/myfirst

Unapaswa kuona matokeo sawa:

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

Hapa unaweza kuona kwamba mfumo wa kujenga unathibitisha kuwa faili imejengwa na kisha kuiendesha. Unaona ingizo la sehemu kwenye mteja wa mwangwi linaonyesha kuwa ilituma pakiti moja ya 1024-byte kwa seva ya mwangwi 10.1.1.2. Wewe pia unaona sehemu ya ukataji miti kwenye seva ya mwangwi kusema kwamba ilipokea ka 1024 kutoka 10.1.1.1. Seva ya mwangwi hucheza tena pakiti kimya kimya na unaweza kuona kwenye logi ya mteja wa mwangwi kwamba ilipokea pakiti yake kutoka kwa seva.

4.3 ns-3 Msimbo wa chanzo

Kwa kuwa sasa umetumia baadhi ya visaidizi vya ns-3, unaweza kuangalia baadhi ya msimbo wa chanzo unaotekeleza utendakazi huu. Nambari ya hivi punde inaweza kutazamwa kwenye seva yetu ya wavuti kwenye kiunga kifuatacho: https://gitlab.com/nsnam/ns-3-dev.git. Hapo utaona ukurasa wa muhtasari wa Mercurial kwa mti wetu wa ukuzaji wa ns-3. Juu ya ukurasa utaona viungo kadhaa,

summary | shortlog | changelog | graph | tags | files

Nenda mbele na uchague kiungo cha faili. Hivi ndivyo kiwango cha juu cha hazina zetu nyingi kitaonekana kama:

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

Maandishi yetu ya mfano yako kwenye saraka mifano. Ukibofya kwenye mifano utaona orodha ya subdirectories. Moja ya faili kwenye saraka ndogo mafunzo - first.cc. Ukibonyeza kwanza.cc utaona kanuni uliyojifunza.

Nambari ya chanzo iko hasa kwenye saraka src. Unaweza kutazama msimbo wa chanzo kwa kubofya jina la saraka au kubofya kiungo cha faili upande wa kulia wa jina la saraka. Ukibofya kwenye saraka ya src, utapata orodha ya subdirectories za src. Ukibofya kwenye saraka ndogo ya msingi, utapata orodha ya faili. Faili ya kwanza utaona (wakati wa kuandika mwongozo huu) ni kutoa mimba.h. Ukibofya kiungo kutoa mimba.h, utatumwa kwa faili chanzo kwa kutoa mimba.h, ambayo ina makro muhimu kwa hati zinazotoka ikiwa hali isiyo ya kawaida itagunduliwa. Nambari ya chanzo ya wasaidizi tuliyotumia katika sura hii inaweza kupatikana kwenye saraka src/Applications/helper. Jisikie huru kuzunguka mti wa saraka ili kujua ni wapi na kuelewa mtindo wa programu za ns-3.

Chanzo: mapenzi.com

Kuongeza maoni