ns-3 network simulator tutorial. Kapitulo 4

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

4 Kinatibuk-ang ideya
4.1 Key abstraction
4.1.1 Node
4.1.2 Aplikasyon
4.1.3 Kanal
4.1.4 Net Device
4.1.5 Topological nga mga katabang
4.2 Unang ns-3 script
4.2.1 Boilerplate code
4.2.2 Mga plug-in
4.2.3 ns3 namespace
4.2.4 Pag-log
4.2.5 Panguna nga gimbuhaton
4.2.6 Paggamit sa mga katabang sa topology
4.2.7 Paggamit sa Aplikasyon
4.2.8 Simulator
4.2.9 Pagtukod sa imong script
4.3 ns-3 Source code

Kapitulo 4

Overview sa konsepto

Ang unang butang nga kinahanglan natong buhaton sa dili pa kita magsugod sa pagkat-on o pagsulat sa ns-3 code mao ang pagpatin-aw sa pipila ka mga batakang konsepto ug abstraction sa sistema. Kadaghanan niini ingon og klaro sa uban, apan among girekomendar ang paggahin og panahon sa pagbasa niini nga seksyon aron masiguro nga ikaw nagsugod sa usa ka lig-on nga pundasyon.

4.1 Key abstraction

Niini nga seksyon, atong tan-awon ang pipila ka mga termino nga sagad gigamit sa web apan adunay piho nga kahulugan sa ns-3.

4.1.1 Node

Sa Internet jargon, usa ka computer device nga nagkonektar sa usa ka network gitawag nga host o usahay usa ka end system. Tungod kay ang ns-3 usa ka simulator sa network ug dili usa ka simulator sa Internet, tinuyo namon nga dili gamiton ang termino nga host, tungod kay kini suod nga may kalabotan sa Internet ug sa mga protocol niini. Hinunoa, migamit kami ug mas kinatibuk-ang termino, nga gigamit usab sa ubang mga simulator, nga naggikan sa graph theory: node (Node).

Sa ns-3, ang nagpahiping abstraction sa usa ka computing device gitawag nga node. Kini nga abstraction girepresentahan sa C++ sa Node nga klase. Klase NodeNode (node) naghatag ug mga pamaagi sa pagmaniobra sa mga representasyon sa mga gamit sa kompyuter sa mga simulation.

Kinahanglan nimong masabtan binurotan, hubag sama sa usa ka kompyuter diin imong gidugang ang pagpaandar. Idugang nimo ang mga butang sama sa mga aplikasyon, protocol stack, ug mga peripheral card nga adunay mga drayber nga nagtugot sa kompyuter sa pagbuhat sa mapuslanon nga trabaho. Gigamit namon ang parehas nga sukaranan nga modelo sa ns-3.

4.1.2 Aplikasyon

Kasagaran, ang software sa kompyuter gibahin sa duha ka halapad nga klase. Ang software sa sistema nag-organisar og lain-laing mga kapanguhaan sa kompyuter sama sa memorya, mga siklo sa processor, disk, network, ug uban pa sumala sa pipila ka modelo sa kompyuter. Ang software sa sistema kasagarang wala mogamit niini nga mga kahinguhaan sa paghimo sa mga buluhaton nga direktang makabenepisyo sa tiggamit. Ang usa ka tiggamit kasagaran nagpadagan sa usa ka aplikasyon aron makab-ot ang usa ka piho nga katuyoan, nga nakakuha ug naggamit mga kapanguhaan nga kontrolado sa software sa sistema.

Kasagaran ang linya sa pagbulag tali sa sistema ug software sa aplikasyon gikuha sa mga pagbag-o sa lebel sa pribilehiyo nga mahitabo sa mga lit-ag sa operating system. Ang ns-3 walay tinuod nga konsepto sa usa ka operating system ug busa walay konsepto sa lebel sa pribilehiyo o mga tawag sa sistema. Kami, bisan pa, adunay usa ka ideya alang sa usa ka app. Sama sa "tinuod nga kalibutan" nga mga aplikasyon sa software nga nagdagan sa mga kompyuter aron mahimo ang mga buluhaton, ang mga aplikasyon sa ns-3 nagdagan sa mga ns-3 node aron makontrol ang mga simulation sa simulate nga kalibutan.

Sa ns-3, ang batakang abstraction alang sa usa ka user nga programa nga nagpatunghag pipila ka kalihokan alang sa pagmodelo usa ka aplikasyon. Kini nga abstraction girepresentahan sa C++ sa klase sa Application. Ang klase sa Application naghatag og mga pamaagi sa pagmaniobra sa mga panglantaw sa atong user-level nga bersyon sa mga aplikasyon sa mga simulation. Ang mga developers gilauman nga mag-espesyalisar sa klase sa Application sa usa ka object-oriented programming sense aron makahimo og bag-ong mga aplikasyon. Sa kini nga panudlo, mogamit kami mga espesyalisasyon sa klase sa Application nga gitawag UdpEchoClientApplication ΠΈ UdpEchoServerApplication. Sama sa imong gilauman, kini nga mga aplikasyon naglangkob sa usa ka hugpong sa mga aplikasyon sa kliyente/server nga gigamit sa pagmugna ug pagpalanog sa mga packet sa network.

4.1.3 Kanal

Sa tinuud nga kalibutan, mahimo nimong ikonektar ang usa ka kompyuter sa usa ka network. Kasagaran ang media diin ang datos gipasa sa kini nga mga network gitawag nga mga channel. Kung imong i-plug ang usa ka Ethernet cable sa usa ka outlet sa dingding, imong gikonektar ang imong computer sa usa ka link sa Ethernet. Sa simulate nga ns-3 nga kalibutan, usa ka node ang konektado sa usa ka butang nga nagrepresentar sa usa ka channel sa komunikasyon. Dinhi, ang batakang abstraction sa subnetwork sa komunikasyon gitawag og channel ug girepresentahan sa C++ sa klase sa Channel.

Класс ChannelChannel naghatag og mga pamaagi sa pagdumala sa interaksyon sa subnet nga mga butang ug pagkonektar sa mga node ngadto kanila. Ang mga channel mahimo usab nga espesyalista sa mga developer sa usa ka object-oriented programming sense. Ang espesyalisasyon sa channel mahimong mag-modelo sa usa ka butang nga yano sama sa wire. Ang usa ka gipahinungod nga channel mahimo usab nga modelo sa mga komplikado nga mga butang sama sa usa ka dako nga switch sa Ethernet o usa ka tulo-ka-dimensional nga wanang nga puno sa mga babag sa kaso sa mga wireless network.

Gamiton namo ang mga pinasahi nga bersyon sa channel niini nga tutorial nga gitawag CsmaChannelCsmaChannel, PointToPointChannelPointToPointChannel ΠΈ WifiChannelWifiChannel. CsmaChannel, pananglitan, nag-modelo sa usa ka bersyon sa usa ka subnet sa komunikasyon nga nagpatuman sa usa ka carrier-sense multiple access communications environment. Naghatag kini kanamo nga sama sa Ethernet nga pagpaandar.

4.1.4 Net Device

Kaniadto nga kung gusto nimo nga magkonektar sa usa ka kompyuter sa usa ka network, kinahanglan ka mopalit usa ka piho nga network cable ug usa ka aparato sa hardware nga gitawag (sa terminolohiya sa PC) usa ka peripheral card nga kinahanglan i-install sa computer. Kung ang usa ka peripheral card nagpatuman sa pipila ka mga function sa networking, kini gitawag nga network interface card o network card. Karon, kadaghanan sa mga kompyuter nag-uban sa integrated network interface hardware ug dili makita sa mga tiggamit nga lahi nga mga aparato.

Ang usa ka network card dili molihok kung wala ang usa ka driver sa software nga nagkontrol sa hardware niini. Sa Unix (o Linux), ang usa ka piraso sa peripheral nga kagamitan giklasipikar isip usa ka himan. Gidumala ang mga device gamit ang mga device driver, ug ang network device (NICs) gidumala gamit ang network device drivers (mga drayber sa network device) ug hiniusang gitawag nga mga aparato sa network (net nga mga gamit). Sa Unix ug Linux, imong gipunting ang mga aparato sa network pinaagi sa mga ngalan sama sa eth0.

Sa ns-3, ang abstraction sa network device naglangkob sa software driver ug sa hardware nga gimodelo. Sa simulation, ang usa ka network device "gi-install" sa usa ka node aron tugutan kini nga makigkomunikar sa ubang mga node pinaagi sa mga channel. Sama sa usa ka tinuod nga kompyuter, ang usa ka node mahimong konektado sa daghang mga channel pinaagi sa daghang mga aparato Mga NetDevice.

Ang abstraction sa network sa usa ka device girepresentahan sa C++ sa klase NetDevice. Klase NetDevice naghatag mga pamaagi alang sa pagdumala sa mga koneksyon sa mga butang sa Node ug Channel; ug mahimong espesyalista sa mga developer sa kahulugan sa object-oriented programming. Sa kini nga panudlo mogamit kami daghang mga espesyal nga bersyon sa gitawag nga NetDevice CsmaNetDevice, PointToPointNetDevice ΠΈ WifiNetDevice. Sama sa usa ka Ethernet network adapter nga gidisenyo aron magtrabaho sa usa ka network Ethernet, CsmaNetDevice gidisenyo sa pagtrabaho uban sa CsmaChannel, PointToPointNetDevice gidisenyo sa pagtrabaho uban sa PointToPointChannelug WifiNetDevice - gidisenyo sa pagtrabaho uban sa WifiChannel.

4.1.5 Topological nga mga katabang

Sa tinuod nga network, makit-an nimo ang mga host computer nga adunay mga network card nga gidugang (o built-in). Sa ns-3 kami moingon nga makakita ka og mga node nga adunay mga NetDevices nga gilakip. Sa usa ka dako nga simulate nga network, kinahanglan nimo nga organisahon ang mga koneksyon tali sa daghang mga butang binurotan, hubag, NetDevice ΠΈ channel.

Sukad sa pagkonektar sa NetDevices sa mga node, NetDevices sa mga link, pag-assign sa mga IP address, ug uban pa. sa ns-3 mao ang usa ka komon nga buluhaton, sa paghimo niini nga ingon sa sayon ​​sa mahimo kita sa paghatag sa gitawag nga topology katabang. Pananglitan, sa paghimo sa usa ka NetDevice, kamo kinahanglan nga sa pagbuhat sa daghang ns-3 kernel nga operasyon, pagdugang sa usa ka MAC address, instalar sa network device sa Node, i-configure ang protocol stack sa node, ug dayon ikonektar ang NetDevice sa Channel. Dugang pa nga trabaho ang gikinahanglan aron makonektar ang daghang device ngadto sa multipoint nga mga link ug dayon ikonektar ang indibidwal nga mga network ngadto sa Internetworks network. Naghatag kami og mga butang nga makatabang sa topology nga naghiusa niining daghang mga operasyon sa usa ka dali gamiton nga modelo alang sa imong kasayon.

4.2 Unang ns-3 script

Kung imong gi-install ang sistema sama sa gisugyot sa ibabaw, makabaton ka sa ns-3 nga pagpagawas sa usa ka direktoryo nga gitawag repos sa imong direktoryo sa balay. Lakaw ngadto sa direktoryo Pagpagawas

Kung wala ka sa ingon nga direktoryo, kini nagpasabut nga wala nimo gipiho ang direktoryo sa output sa pagtukod sa bersyon sa pagpagawas sa ns-3, paghimo sama niini:
$ ./waf configure β€”build-profile=release β€”out=build/release,
$ ./waf pagtukod

didto kinahanglan nimo nga makita ang usa ka istruktura sa direktoryo nga susama sa mosunod:

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

Lakaw ngadto sa direktoryo mga pananglitan/tutorial. Kinahanglan nimo nga makita ang usa ka file nga nahimutang didto nga gitawag una.cc. Kini usa ka script nga maghimo usa ka yano nga point-to-point nga koneksyon tali sa duha ka mga node ug magpadala usa ka pakete taliwala sa mga node. Atong tan-awon kini nga script linya sa linya; sa pagbuhat niini, abli first.cc sa imong paborito nga editor.

4.2.1 Boilerplate code
Ang unang linya sa file mao ang editor mode line emacs. Gisultihan niini ang mga emac bahin sa mga kombensiyon sa pag-format (estilo sa coding) nga among gigamit sa among source code.

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

Kanunay kini nga usa ka kontrobersyal nga isyu, mao nga kinahanglan naton nga itakda ang rekord nga diretso aron makuha kini dayon. Ang proyekto sa ns-3, sama sa kadaghanang dagkong mga proyekto, nagsagop ug estilo sa coding nga kinahanglang sundon sa tanang natampo nga code. Kung gusto nimo nga iamot ang imong code sa proyekto, kinahanglan ka nga mouyon sa ns-3 coding standard, ingon nga gihulagway sa file. doc/codingstd.txt o gipakita sa web page sa proyekto: https://www.nsnam.org/develop/contributing-code/coding-style/.

Among girekomenda nga maanad ka sa hitsura ug pagbati sa ns-3 code ug ipadapat kini nga sumbanan sa matag higayon nga magtrabaho ka sa among code. Ang tibuok development team ug mga contributor miuyon niini human sa pipila ka pagbagulbol. Ang linya sa emacs mode sa ibabaw nagpasayon ​​sa pag-format sa husto kung imong gigamit ang emacs editor.

Ang ns-3 simulator lisensyado sa paggamit GNU General Public License. Imong makita ang angay nga GNU legal header sa matag ns-3 distribution file. Kasagaran makakita ka og pahibalo sa copyright alang sa usa sa mga miapil nga institusyon sa ns-3 nga proyekto sa ibabaw sa GPL nga teksto ug awtor, nga gipakita sa ubos.

/* 
* 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 Mga plug-in

Ang code mismo nagsugod sa usa ka serye sa mga pahayag sa paglakip (naglakip sa).

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

Aron matabangan ang among tag-as nga lebel nga mga tiggamit sa scripting nga makasagubang sa daghang gidaghanon sa mga file sa header nga naa sa sistema, among gigrupo sila sumala sa ilang paggamit sa daghang mga module. Naghatag kami usa ka file sa header nga mag-recursive nga magkarga sa tanan nga mga file sa header nga gigamit sa usa ka gihatag nga module. Imbis nga pangitaon kung unsa nga header ang imong kinahanglan ug posible nga makuha ang husto nga lista sa mga dependency, gihatagan ka namon nga abilidad sa pag-download sa usa ka grupo sa mga file nga adunay daghang kadaghanon. Dili kini ang labing episyente nga pamaagi, apan sigurado nga labi ka dali ang pagsulat sa mga script.

Ang matag usa sa ns-3 naglakip sa mga file gibutang sa usa ka direktoryo nga gitawag ns3 (pagtukod og subdirectory) aron malikayan ang mga panagsumpaki sa ngalan sa file sa panahon sa proseso sa pagtukod. file ns3/core-module.h katumbas sa ns-3 module, nga imong makita sa direktoryo src/kinauyokan sa pagpagawas nga imong gi-install. Sa lista sa kini nga direktoryo makit-an nimo ang daghang mga file sa header. Kung maghimo ka sa asembliya, Waf nagbutang sa mga public header file sa ns3 directory sa usa ka subdirectory pagtukod/pag-debug

Kung wala ka sa ingon nga direktoryo, kini nagpasabut nga wala nimo gipiho ang direktoryo sa output sa pagtukod sa bersyon sa pagpagawas sa ns-3, paghimo sama niini:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf pagtukod
o
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf pagtukod

o pagtukod / gi-optimize, depende sa imong configuration. Waf awtomatik usab nga makamugna og module nga naglakip sa file aron ma-load ang tanang public header files. Tungod kay siyempre imong gisunod kini nga giya sa relihiyon, nahimo na nimo

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

aron ma-configure ang proyekto sa pagpadagan sa mga debug build nga naglakip sa mga pananglitan ug mga pagsulay. Gibuhat usab nimo

$ ./waf

sa pag-assemble sa proyekto. Busa karon kung imong tan-awon ang direktoryo ../../build/debug/ns3, unya didto makit-an nimo, ug uban pa, ang mga file sa header sa upat nga mga module nga gipakita sa ibabaw. Mahimo nimong tan-awon ang mga sulod niini nga mga file ug makita nga kini naglakip sa tanan nga mga pampublikong file nga gigamit sa katugbang nga mga module.

4.2.3 ns3 namespace

Sunod nga linya sa script una.cc usa ka deklarasyon sa namespace.

using namespace ns3;

Ang ns-3 nga proyekto gipatuman sa usa ka C++ namespace nga gitawag ug ns3. Gigrupo niini ang tanan nga mga deklarasyon nga may kalabotan sa ns-3 sa usa ka sakup sa gawas sa pangkalibutanon nga namespace, nga gilauman nga makatabang sa paghiusa sa uban nga code. Ang paggamit sa C++ operator nagpaila sa ns-3 namespace ngadto sa kasamtangan (global) nga deklaratibo nga rehiyon. Kini usa ka nindot nga paagi sa pag-ingon nga pagkahuman niini nga deklarasyon, dili nimo kinahanglan nga i-type ang ns3::scope permission operator sa wala pa ang tanan nimong ns-3 code aron magamit kini. Kung dili ka pamilyar sa mga namespace, tan-awa ang halos bisan unsang C++ nga libro ug itandi ang ns3 namespace gamit ang std namespace ug deklarasyon using namespace std; sa mga pananglitan sa pagtrabaho kauban ang output operator gasto ug mga sapa.

4.2.4 Pag-log

Ang sunod nga linya sa script mao ang:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Among gamiton kini nga pahayag isip usa ka kombenyenteng dapit aron hisgotan ang among sistema sa dokumentasyon doxygen. Kung tan-awon nimo ang website sa proyekto sa ns-3, makit-an nimo ang link sa Dokumentasyon sa navigation bar. Kung imong i-klik kini nga link madala ka sa among panid sa dokumentasyon. Adunay link nga "Latest Release" nga magdala kanimo sa dokumentasyon para sa pinakabag-o nga stable nga bersyon sa ns-3. Kung imong pilion ang link nga "API Documentation", dad-on ka sa panid sa dokumentasyon sa ns-3 API.

Sa wala nga bahin sa panid makit-an nimo ang usa ka graphical nga representasyon sa istruktura sa dokumentasyon. Ang maayong dapit sa pagsugod mao ang Modules ns-3 "libro" sa ns-3 navigation tree. Kung imong ibutyag modules, makakita ka og lista sa ns-3 modules nga dokumentasyon. Sama sa gihisgutan sa ibabaw, ang konsepto sa usa ka module dinhi direktang may kalabutan sa mga file nga gilakip sa module sa ibabaw. Ang ns-3 logging subsystem gihisgutan sa seksyon Paggamit sa Logging Module, mao nga kita mobalik niini sa ulahi niini nga panudlo, apan makakat-on ka mahitungod sa pahayag sa ibabaw pinaagi sa pagtan-aw sa module coreug dayon ablihan ang libro Mga gamit sa pag-debugug dayon pagpili sa panid logging. Pag-klik sa logging.

Kinahanglan nimong susihon karon ang dokumentasyon doxygen alang sa module logging. Sa lista sa mga macro sa ibabaw sa panid, makakita kag entry para sa NS_LOG_COMPONENT_DEFINE. Sa dili pa i-klik ang link, siguruha nga tan-awon ang "Detalyadong Deskripsyon" sa module sa pagrehistro aron masabtan kung giunsa kini molihok sa kinatibuk-an. Aron mahimo kini mahimo ka nga mag-scroll paubos o pilia ang "More..." sa ubos sa tsart.

Sa higayon nga ikaw adunay usa ka kinatibuk-ang ideya kung unsa ang nahitabo, ipadayon ug tan-awa ang dokumentasyon alang sa piho nga NS_LOG_COMPONENT_DEFINE. Dili nako doblehon ang dokumentasyon dinhi, apan sa pag-summarize, kini nga linya nagpahayag sa usa ka bahin sa pagrehistro nga gitawag Pananglitan sa UnangScript, nga nagtugot kanimo sa pagpagana o pag-disable sa console logging sa mga mensahe pinaagi sa paghisgot sa usa ka ngalan.

4.2.5 Panguna nga gimbuhaton

Sa mosunod nga mga linya sa script imong makita,

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

Kini usa lamang ka deklarasyon sa nag-unang gimbuhaton sa imong programa (script). Sama sa bisan unsang C++ nga programa, kinahanglan nimo nga ipasabut ang usa ka panguna nga function, kini gipatuman una. Walay espesyal dinhi. Ang imong ns-3 script kay usa lang ka C++ nga programa. Ang mosunod nga linya nagtakda sa resolusyon sa oras sa 1 nanosecond, nga mao ang default:

Time::SetResolution (Time::NS);

Ang resolusyon sa oras, o yano nga resolusyon, mao ang pinakagamay nga kantidad sa oras nga mahimong magamit (ang pinakagamay nga representasyon nga kalainan tali sa duha ka beses). Mahimo nimong usbon ang resolusyon sa eksaktong kausa. Ang mekanismo nga naghatag niini nga pagka-flexible naggamit sa panumduman, mao nga sa higayon nga ang resolusyon klaro nga gitakda, atong buhian ang panumduman, nga makapugong sa dugang nga mga update. (Kung dili nimo klaro nga itakda ang resolusyon, kini mahimong default sa usa ka nanosecond ug ang memorya mapagawas kung magsugod ang simulation.)

Ang mosunod nga duha ka linya sa script gigamit aron mahimo ang duha ka mga sangkap sa pag-log nga gitukod sa mga aplikasyon EchoClient ΠΈ EchoServer:

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

Kung imong basahon ang dokumentasyon para sa logging component, imong makita nga adunay daghang lebel sa logging/granularity nga imong mahimo sa matag component. Kining duha ka linya sa code makapahimo sa debug logging ngadto sa INFO level para sa echo clients ug servers. Niini nga lebel, ang aplikasyon mag-imprinta sa mga mensahe samtang kini nagpadala ug nakadawat og mga pakete atol sa simulation.

Karon kita moadto sa negosyo sa paghimo sa topology ug pagpadagan sa simulation. Gigamit namo ang topology helper nga mga butang aron mahimo kining trabahoa nga sayon ​​kutob sa mahimo.

4.2.6 Paggamit sa mga katabang sa topology

Ang sunod nga duha ka linya sa code sa among script maghimo gyud sa Node ns-3 nga mga butang nga magrepresentar sa mga kompyuter sa simulation.

NodeContainer nodes;
nodes.Create (2);

Sa dili pa kita magpadayon, atong pangitaon ang dokumentasyon alang sa klase NodeContainer. Ang laing paagi aron makaadto sa dokumentasyon alang sa usa ka klase mao ang pinaagi sa tab mga klase sa mga panid doxygen. Kung naa kay Doxygen nga bukas, pag-scroll lang sa taas sa panid ug pilia ang tab nga Mga Klase. Kinahanglan nimong makita ang usa ka bag-ong set sa mga tab, usa niini usa ka lista sa mga klase. Ubos niini nga tab imong makita ang usa ka lista sa tanang ns-3 nga mga klase. Pag-scroll down sa ns3::NodeContainer. Kung makakita ka og klase, pilia kini aron moadto sa dokumentasyon para sa klase.

Sama sa atong nahinumduman, usa sa atong importante nga abstraction mao ang node. Nagrepresentar kini sa kompyuter diin atong idugang ang mga butang sama sa protocol stack, aplikasyon, ug peripheral card. Katabang sa topology NodeContainer naghatag ug sayon ​​nga paagi sa paghimo, pagdumala ug pag-access sa bisan unsang butang binurotan, hubag, nga atong gimugna aron sa pagpadagan sa simulation. Ang una nga linya sa ibabaw yano nga nagpahayag NodeContainer, nga among gitawag nga mga node. Ang ikaduhang linya nagtawag sa Create method sa nodes nga butang ug nangutana sa sudlanan sa paghimo og duha ka node. Ingon sa gihulagway sa doxygen, ang sudlanan naghangyo sa ns-3 nga sistema sa paghimo og duha ka butang binurotan, hubag ug nagtipig sa mga pointer niini nga mga butang sa sulod.

Ang mga node nga gihimo sa script wala pa’y mahimo. Ang sunod nga lakang sa pagtukod sa topology mao ang pagkonektar sa among mga node sa network. Ang pinakasimple nga porma sa network nga among gisuportahan mao ang point-to-point nga koneksyon tali sa duha ka node. Maghimo kami karon sa ingon nga koneksyon.

PointToPointHelper

Naghimo kami usa ka punto-sa-punto nga koneksyon gamit ang pamilyar nga sumbanan, gamit ang usa ka butang nga katabang sa topology aron mahimo ang ubos nga lebel nga trabaho nga gikinahanglan alang sa koneksyon. Hinumdomi nga ang among duha ka yawe nga abstraction NetDevice ΠΈ channel. Sa tinuud nga kalibutan, kini nga mga termino halos katumbas sa mga peripheral card ug mga kable sa network. Kasagaran, kining duha ka mga butang suod nga may kalabutan sa usag usa, ug walay usa nga makasalig sa pagpaambit, pananglitan, mga himan Ethernet sa usa ka wireless channel. Ang among mga katabang sa topology nagsunod niining suod nga relasyon ug busa mogamit ka usa ka butang sa kini nga senaryo PointToPointHelper alang sa pag-set up ug pagkonektar sa ns-3 nga mga butang PointToPointNetDevice ΠΈ PointToPointChannel. Ang sunod nga tulo ka linya sa script:

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

Unang linya,

PointToPointHelper pointToPoint;

nagmugna og usa ka pananglitan sa usa ka butang sa stack PointToPointHelper. Gikan sa taas nga lebel nga punto sa panglantaw ang mosunod nga linya,

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

nagsulti sa butang PointToPointHelper gamita ang kantidad nga "5 Mbit/s" (lima ka megabit kada segundo) isip "DataRate".

Gikan sa usa ka mas espesipikong punto sa panglantaw, ang string nga "DataRate" katumbas sa gitawag nato nga attribute PointToPointNetDevice. Kung tan-awon nimo doxygen para sa klase ns3::PointToPointNetDevice ug sa dokumentasyon alang sa pamaagi GetTypeId makit-an nimo ang usa ka lista sa mga hiyas nga gihubit alang sa aparato. Lakip kanila mao ang hiyas "DataRate" Kadaghanan sa mga butang nga makita sa user nga ns-3 adunay susama nga mga lista sa mga hiyas. Gigamit namon kini nga mekanismo aron dali nga ma-set up ang simulation nga wala’y pag-recompilation, ingon sa imong makita sa sunod nga seksyon.

Sama sa "DataRate" sa PointToPointNetDevice, imong makit-an ang "Delay" nga attribute nga nalangkit sa PointToPointChannel. Ang katapusan nga linya

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

miingon PointToPointHelper gamita ang bili nga "2 ms" (duha ka milliseconds) isip propagation delay value para sa point-to-point nga link nga sunodsunod nga gihimo niini.

NetDeviceContainer

Sa pagkakaron naa mi sa script NodeContainer, nga adunay duha ka node. Kami adunay PointToPointHelper, nga giandam alang sa pagmugna og mga butang PointToPointNetDevices ug pagkonektar kanila gamit ang PointToPointChannel nga butang. Sama nga among gigamit ang NodeContainer topology helper object sa paghimo og mga node, mangutana kami PointToPointHelper paghimo sa trabaho alang kanamo nga may kalabutan sa paghimo, pag-configure ug pag-instalar sa among mga aparato. Kinahanglan namon ang usa ka lista sa tanan nga gibuhat nga mga butang NetDevice, mao nga among gigamit NetDeviceContainer sa pagtipig kanila sa samang paagi nga among gigamit NodeContainer aron tipigan ang mga node nga among gibuhat. Ang sunod nga duha ka linya sa code,

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

kompleto nga setup sa device ug channel. Ang una nga linya nagpahayag sa sudlanan sa aparato nga gihisgutan sa ibabaw, ug ang ikaduha mao ang panguna nga trabaho. Pamaagi Pag-instalar usa ka butang PointToPointHelper gidawat NodeContainer isip parameter. Sulod NetDeviceContainer alang sa matag node nga nahimutang sa NodeContainer gihimo (alang sa punto-sa-punto nga komunikasyon kinahanglan adunay eksaktong duha niini) PointToPointNetDevice gihimo ug gitipigan sa sudlanan sa aparato. PointToPointChannel gilalang ug duha ang gilakip niini PointToPointNetDevices. Human sa paghimo sa mga butang, ang mga hiyas gitipigan sa PointToPointHelper, gigamit sa pagsugod sa katugbang nga mga hiyas sa gibuhat nga mga butang.

Human sa paghimo sa usa ka tawag pointToPoint.Install (mga node) kita adunay duha ka mga node, ang matag usa adunay usa ka point-to-point network device nga gi-install ug usa ka point-to-point nga link tali kanila. Ang duha nga mga aparato i-configure aron magpadala mga datos sa katulin nga lima ka megabits matag segundo nga adunay pagkalangan sa transmission nga duha ka millisecond sa ibabaw sa channel.

InternetStackHelper

Naa na miy mga node ug device nga na-configure, pero ang among mga node walay protocol stack nga na-install. Ang sunod nga duha ka linya sa code ang mag-atiman niini.

InternetStackHelper stack;
stack.Install (nodes);

InternetStackHelper - usa ka topology helper para sa Internet stacks, susama sa PointToPointHelper para sa point-to-point nga network device. Pamaagi Pag-instalar gikuha ang NodeContainer isip parameter. Kung gipatuman, kini mag-install sa Internet stack (TCP, UDP, IP, ug uban pa) sa matag container node.

IPv4AddressHelper

Dayon kinahanglan natong i-associate ang atong mga device sa mga IP address. Naghatag kami usa ka katabang sa topology aron pagdumala sa alokasyon sa IP address. Ang bugtong API nga makita sa user mao ang pagbutang sa base IP address ug netmask nga gamiton sa paghimo sa aktuwal nga pag-apod-apod sa adres (kini gihimo sa ubos nga lebel sulod sa katabang). Ang sunod nga duha ka linya sa code sa among pananglitan nga script una.cc,

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

ideklara ang address helper object ug sultihi kini nga kini kinahanglan magsugod sa paggahin sa mga IP address gikan sa network 10.1.1.0, gamit ang 255.255.255.0 bitmask aron mahibal-an. Sa kasagaran, ang gigahin nga mga adres magsugod sa usa ug modaghan sa monotonically, mao nga ang unang adres nga gigahin gikan niini nga base mao ang 10.1.1.1, unya 10.1.1.2, ug uban pa. Sa tinuud, sa usa ka ubos nga lebel, ang sistema sa ns-3 nahinumdom sa tanan nga gigahin nga mga adres sa IP ug nagpatunghag usa ka makamatay nga sayup kung wala ka aksidente nga nakamugna usa ka kahimtang diin ang parehas nga adres nahimo kaduha (sa paagi, kini nga sayup lisud nga i-debug).

Ang mosunod nga linya sa code,

Ipv4InterfaceContainer interfaces = address.Assign (devices);

naghimo sa aktuwal nga buluhaton sa adres. Sa ns-3 nagtukod kami usa ka koneksyon tali sa usa ka IP address ug usa ka aparato gamit ang butang IPv4 Interface. Sama nga usahay kinahanglan namon ang usa ka lista sa mga aparato sa network nga gihimo sa katabang alang sa ulahi nga paggamit, usahay kinahanglan namon ang usa ka lista sa mga butang IPv4 Interface. IPv4InterfaceContainer naghatag niini nga gamit.

Nagtukod kami usa ka point-to-point nga network, nga adunay mga stack nga na-install ug gi-assign ang mga IP address. Karon kinahanglan namon ang mga aplikasyon sa matag node aron makamugna og trapiko.

4.2.7 Paggamit sa Aplikasyon

Ang usa pa sa mga nag-unang abstraction sa ns-3 nga sistema mao ang Paggamit (aplikasyon). Niini nga senaryo naggamit kami og duha ka base nga mga espesyalisasyon sa klase Paggamit ns-3 gitawag UdpEchoServerApplication ΠΈ UdpEchoClientApplication. Sama sa nangaging mga kaso, naggamit kami og auxiliary nga mga butang aron ma-configure ug madumala ang mga base nga mga butang. Dinhi among gigamit UdpEchoServerHelper ΠΈ UdpEchoClientHelper mga butang aron sa paghimo sa atong mga kinabuhi nga mas sayon.

UdpEchoServerHelper

Ang mosunod nga mga linya sa code sa among first.cc nga pananglitan nga script gigamit sa pag-configure sa usa ka aplikasyon sa UDP echo server sa usa sa mga node nga among gibuhat sa sayo pa.

UdpEchoServerHelper echoServer (9);

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

Ang unang linya sa code sa ibabaw nga snippet nagmugna UdpEchoServerHelper. Sama sa naandan, dili kini usa ka aplikasyon mismo, kini usa ka butang nga makatabang kanamo sa paghimo og tinuod nga mga aplikasyon. Usa sa among mga kombensiyon mao ang pagpasa sa gikinahanglang mga hiyas ngadto sa tigtukod sa butang nga katabang. Sa kini nga kaso, ang katabang dili makahimo bisan unsa nga mapuslanon gawas kung kini gihatag ang numero sa pantalan diin ang server maminaw sa mga pakete, kini nga numero kinahanglan usab nga mahibal-an sa kliyente. Sa kini nga kaso, gipasa namon ang numero sa port sa tigtukod sa katabang. Ang constructor, sa baylo, yano nga nagbuhat SetAttribute uban sa gipasa nga bili. Sa ulahi, kung gusto, mahimo nimong gamiton ang SetAttribute aron magbutang usa ka lahi nga kantidad alang sa attribute sa Port.

Sama sa daghang uban pang mga auxiliary nga mga butang, ang butang UdpEchoServerHelper adunay pamaagi Pag-instalar. Ang pagpatuman niini nga pamaagi epektibo nga nagmugna sa usa ka batakang aplikasyon sa echo server ug nagbugkos niini sa host. Makaiikag, ang pamaagi Pag-instalar gidawat NodeContainer isip parameter sama sa uban Pag-instalar mga pamaagi nga atong nakita.

Ang C++ implicit conversion nga nagtrabaho dinhi nagkinahanglan sa resulta sa pamaagi node.Get(1) (nga nagbalik sa usa ka smart pointer sa node object - Ptr ) ug gigamit kini sa constructor alang sa wala mailhi nga butang NodeContainernga dayon ipasa sa pamaagi Pag-instalar. Kung dili nimo mahibal-an sa C ++ code kung unsang pirma sa pamaagi ang giipon ug gipatuman, unya tan-awa ang mga implicit nga pagkakabig.

Karon atong makita kana echoServer.Install mahitungod sa pag-instalar sa aplikasyon UdpEchoServerApplication sa nakit-an sa NodeContainernga among gigamit sa pagdumala sa among mga node, node nga adunay indeks 1. Pamaagi Pag-instalar ibalik ang usa ka sudlanan nga adunay sulud nga mga punto sa tanan nga mga aplikasyon (sa kini nga kaso usa, tungod kay gipasa namon ang usa ka anonymous NodeContainer, nga adunay usa ka node) nga gihimo sa katabang.

Ang mga aplikasyon kinahanglan nga magtino kung kanus-a magsugod sa paghimo og trapiko Β«PagsugodΒ» ug mahimo nga kinahanglan nga dugang nga ipiho ang oras kung kanus-a kini ihunong "hunong". Naghatag kami sa duha nga kapilian. Kini nga mga panahon gitakda gamit ang mga pamaagi ApplicationContainer pagsugod ΠΈ Hunong. Kini nga mga pamaagi modawat sa mga parameter sa tipo Oras. Sa kini nga kaso naggamit kami usa ka tin-aw nga pagkasunod-sunod sa mga pagbag-o sa C++ aron makuha ang C++ double 1.0 ug i-convert kini ngadto sa tns-3 Time object nga naggamit sa Seconds object aron ma-convert ngadto sa segundos. Hinumdumi nga ang mga lagda sa pagkakabig mahimong kontrolado sa tagsulat sa modelo, ug ang C ++ adunay kaugalingon nga mga lagda, mao nga dili ka kanunay makasalig sa mga parameter nga nakabig sa paagi nga imong gilauman. Duha ka linya

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

magpahinabo nga magsugod ang aplikasyon sa echo server (awtomatiko nga i-on) usa ka segundo pagkahuman magsugod ang simulation ug mohunong (i-off) pagkahuman sa napulo ka segundo sa simulation. Tungod sa kamatuoran nga among gideklarar ang usa ka simulation event (application stop event), nga ipatuman sa napulo ka segundos, labing menos napulo ka segundos sa network operation ang ma-simulate.

UdpEchoClientHelper

Aplikasyon sa kliyente alingawngaw gi-configure sa paagi nga halos parehas sa server. Adunay usa ka base nga butang UdpEchoClientApplication, nga kontrolado
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));;

Bisan pa, alang sa kliyente sa echo kinahanglan namon nga magtakda og lima ka lainlaing mga hiyas. Ang unang duha ka mga hiyas gitakda sa panahon sa paglalang UdpEchoClientHelper. Gipasa namo ang mga parameter nga gigamit (sa sulod sa katabang) aron itakda ang mga hiyas "RemoteAddress" ΠΈ "RemotePort" uyon sa among kasabutan nga ipasa ang gikinahanglan nga mga parameter sa tigtukod sa katabang.

Atong hinumduman nga atong gigamit IPv4InterfaceContainer aron masubay ang mga IP address nga among gi-assign sa among mga device. Ang null interface sa mga interface nga sudlanan motakdo sa IP address sa null node sa node container. Ang unang interface sa mga interface nga sudlanan katumbas sa IP address sa unang node sa node sudlanan. Busa, sa unang linya sa code (sa ibabaw), naghimo kami og usa ka katabang ug gisultihan kini nga ang hilit nga adres sa kliyente mao ang IP address nga gi-assign sa host diin nahimutang ang server. Nag-ingon usab kami nga kinahanglan namon nga maghikay alang sa mga pakete nga ipadala sa port nine.

Ang "MaxPackets" nga hiyas nagsulti sa kliyente sa labing taas nga gidaghanon sa mga pakete nga mahimo natong ipadala sa panahon sa simulation. Ang "Interval" attribute nagsulti sa kliyente kung unsa ka dugay maghulat tali sa mga pakete, ug ang "PacketSize" nga attribute nagsulti sa kliyente kung unsa ka dako ang payload sa packet. Uban niini nga kombinasyon sa hiyas among gisultihan ang kliyente nga magpadala og usa ka 1024-byte nga pakete.

Sama sa echo server, among gibutang ang mga hiyas sa echo client pagsugod ΠΈ Hunong, apan dinhi magsugod kami sa kliyente sa usa ka segundo human ma-on ang server (duha ka segundo human sa pagsugod sa simulation).

4.2.8 Simulator

Niini nga punto kinahanglan naton nga ipadagan ang simulation. Gihimo kini gamit ang global function Simulator:: Dagan.

Simulator::Run ();

Kung gitawag namon kaniadto ang mga pamaagi,

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

gi-iskedyul gyud namo ang mga panghitabo sa simulator sa 1,0 segundos, 2,0 segundos, ug duha ka panghitabo sa 10,0 segundos. Human sa tawag Simulator:: Dagan, ang sistema magsugod sa pagtan-aw sa listahan sa mga naka-iskedyul nga mga panghitabo ug ipatuman kini. Kini una nga magpabuto sa usa ka panghitabo pagkahuman sa 1,0 segundos, nga mag-trigger sa aplikasyon sa echo server (kini nga panghitabo mahimo usab nga mag-iskedyul sa daghang uban pang mga panghitabo). Dayon kini magpabuto sa usa ka panghitabo nga naka-iskedyul sa t=2,0 segundos nga maglunsad sa aplikasyon sa echo client. Sa makausa pa, kini nga kalihokan mahimong adunay daghang mga kalihokan nga giplano. Ang pagsugod sa pagpatuman sa panghitabo sa echo client magsugod sa data transfer phase sa simulation pinaagi sa pagpadala og packet ngadto sa server.

Ang buhat sa pagpadala sa usa ka packet ngadto sa server mag-trigger sa usa ka kutay sa mga panghitabo nga awtomatik nga ma-iskedyul sa luyo sa mga talan-awon ug nga mag-implementar sa mga mekaniko sa pagpadala sa usa ka echo packet sumala sa timing parameters nga atong gibutang sa script.

Ingon usa ka sangputanan, tungod kay nagpadala ra kami usa ka pakete (hinumdomi, ang attribute MaxPackets gibutang sa usa), ang kadena sa mga panghitabo nga gisugdan sa usa ka kliyente nga ping matapos ug ang simulation moadto sa standby mode. Kung mahitabo na kini, ang nahabilin nga gikatakda nga mga panghitabo mao ang mga panghitabo Hunong alang sa server ug kliyente. Kung kini nga mga panghitabo ipatuman, wala nay mga panghitabo nga nahabilin alang sa dugang nga pagproseso ug Simulator:: Dagan ibalik ang kontrol. Kompleto na ang simulation.

Ang nahabilin mao ang paglimpyo sa imong kaugalingon. Gihimo kini pinaagi sa pagtawag sa global function Simulator:: Gub-on. Tungod kay ang mga function sa katabang (o ubos nga lebel nga ns-3 code) gitawag, nga giorganisar aron ang mga kaw-it gisulod sa simulator aron gub-on ang tanan nga mga butang nga gibuhat. Dili nimo kinahanglan nga masubay ang bisan unsang mga butang sa imong kaugalingon - ang kinahanglan nimong buhaton mao ang pagtawag Simulator:: Gub-on ug lakaw. Ang ns-3 nga sistema mobuhat niining lisud nga trabaho alang kanimo. Ang nahabilin nga mga linya sa among una nga ns-3 script, first.cc, buhata kana:

Simulator::Destroy ();
return 0;
}

Kanus-a mohunong ang simulator?

Ang ns-3 usa ka discrete event (DE) simulator. Sa ingon nga simulator, ang matag panghitabo nalangkit sa oras sa pagpatuman niini, ug ang simulation nagpadayon pinaagi sa pagproseso sa mga panghitabo sa han-ay nga kini mahitabo samtang ang simulation nagpadayon. Ang mga panghitabo mahimong hinungdan nga ma-iskedyul ang umaabot nga mga panghitabo (pananglitan, ang usa ka timer mahimong mag-reschedule sa kaugalingon aron mahuman ang pag-ihap sa sunod nga agwat).

Ang mga inisyal nga panghitabo kasagaran gisugdan sa entidad, pananglitan ang IPv6 mag-iskedyul sa pagdiskobre sa mga serbisyo sa network, mga hangyo sa silingan, ug uban pa. Ang aplikasyon nag-iskedyul sa unang packet nga pagpadala nga panghitabo, ug uban pa. Kung ang usa ka panghitabo giproseso, kini makamugna og zero, usa, o daghan pa nga mga panghitabo. Samtang nag-uswag ang simulation, mahitabo ang mga panghitabo, matapos o maghimo mga bag-o. Ang simulation awtomatik nga mohunong kung ang pila sa panghitabo walay sulod o usa ka espesyal nga panghitabo ang nakit-an Hunong. Panghitabo Hunong namugna pinaagi sa function Simulator:: Hunong (panahon sa paghunong).

Adunay usa ka tipikal nga kaso diin ang Simulator:: Paghunong hingpit nga gikinahanglan aron mahunong ang simulation: kung adunay mga panghitabo nga nagpaluyo sa kaugalingon. Ang nagpaluyo sa kaugalingon (o nagbalikbalik) nga mga panghitabo mao ang mga panghitabo nga kanunay gi-reschedule. Ingon usa ka sangputanan, kanunay nila nga gitago ang pila sa panghitabo nga dili haw-ang. Adunay daghang mga protocol ug modules nga adunay mga nagbalikbalik nga mga panghitabo, pananglitan:

β€’ FlowMonitor - regular nga pagsusi sa nawala nga mga pakete;

β€’ RIPng – periodic broadcast sa routing table updates;

β€’ ug uban pa.

Sa maong mga kaso Simulator:: Hunong gikinahanglan aron mahunong sa husto ang simulation. Dugang pa, kung ang ns-3 naa sa emulation mode, ang RealtimeSimulator gigamit aron i-synchronize ang simulation nga orasan sa orasan sa makina, ug Simulator:: Hunong gikinahanglan aron mahunong ang proseso.

Daghan sa mga programa sa simulation sa libro wala motawag Simulator:: Hunong tin-aw, tungod kay sila awtomatikong matapos kung ang mga nakapila nga mga panghitabo nahurot na. Bisan pa, kini nga mga programa modawat usab sa Simulator:: Hunong nga tawag. Pananglitan, ang mosunod nga dugang nga pahayag sa unang pananglitan nga programa mag-iskedyul og dayag nga paghunong sa 11 segundos:

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

Ang naa sa itaas dili gyud magbag-o sa pamatasan sa kini nga programa, tungod kay kini nga partikular nga simulation natural nga matapos pagkahuman sa 10 segundos. Apan kung imong usbon ang oras sa paghunong sa pahayag sa ibabaw gikan sa 11 segundos ngadto sa 1 segundo, imong mamatikdan nga ang simulation mohunong sa dili pa ang bisan unsang output moigo sa screen (tungod kay ang output mahitabo human sa mga 2 segundos sa simulation time).

Importante nga tawagan ang Simulator :: Hunong sa dili pa motawag sa Simulator :: Run; kon dili Simulator :: Ang Run mahimong dili na mobalik sa kontrol sa main program aron ipatuman ang paghunong!

4.2.9 Pagtukod sa imong script

Gibuhat namo ang paghimo sa imong yano nga mga script nga walay hinungdan. Ang kinahanglan nimong buhaton mao ang pagbutang sa imong script sa direktoryo sa scratch ug kini awtomatiko nga matukod kung modagan ka Waf. Atong sulayan. Balik sa taas nga lebel nga direktoryo ug kopyaha examples/tutorial/first.cc sa katalogo pagkalot

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

Karon paghimo sa imong unang sample script gamit waf:

$ ./waf

Kinahanglan nimong makita ang mga mensahe nga nagpaila nga ang imong unang pananglitan nahimo nga malampuson.

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)

Karon mahimo nimong ipadagan ang panig-ingnan (timan-i nga kung imong tukuron ang imong programa sa direktoryo sa scratch, nan kinahanglan nimo kini daganan pagkalot):

$ ./waf --run scratch/myfirst

Kinahanglan nimong makita ang parehas nga output:

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.418s) Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

Dinhi imong makita nga ang sistema sa pagtukod nagpamatuod nga ang file natukod ug dayon gipadagan kini. Imong makita ang component entry sa echo client nagpakita nga nagpadala kini ug usa ka 1024-byte packet sa echo server 10.1.1.2. Nakita usab nimo ang sangkap sa pag-log sa echo server aron isulti nga nakadawat kini 1024 bytes gikan sa 10.1.1.1. Ang echo server hilom nga nag-replay sa packet ug imong makita sa echo client's log nga kini nakadawat sa iyang packet balik gikan sa server.

4.3 ns-3 Source code

Karon nga nagamit na nimo ang pipila sa mga katabang sa ns-3, mahimo nimong tan-awon ang pipila sa source code nga nagpatuman niini nga gamit. Ang pinakabag-o nga code mahimong makita sa among web server sa mosunod nga link: https://gitlab.com/nsnam/ns-3-dev.git. Didto imong makita ang Mercurial summary page para sa among ns-3 development tree. Sa ibabaw sa panid makita nimo ang daghang mga link,

summary | shortlog | changelog | graph | tags | files

Sige ug pilia ang link sa mga file. Kini ang hitsura sa labing taas nga lebel sa kadaghanan sa among mga repositoryo:

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

Ang among pananglitan nga mga script naa sa direktoryo mga ehemplo. Kung imong i-klik ang mga pananglitan makita nimo ang usa ka lista sa mga subdirectory. Usa sa mga file sa subdirectory tutorial - una.cc. Kung nag-klik ka sa una.cc imong makita ang code nga imong nakat-unan.

Ang source code kasagarang nahimutang sa direktoryo src. Mahimo nimong tan-awon ang source code pinaagi sa pag-klik sa ngalan sa direktoryo o pag-klik sa link sa mga file sa tuo sa ngalan sa direktoryo. Kung nag-klik ka sa direktoryo sa src, makakuha ka usa ka lista sa mga subdirektoryo sa src. Kung dayon nimo i-klik ang core subdirectory, makit-an nimo ang usa ka lista sa mga file. Ang unang file nga imong makita (sa panahon sa pagsulat niini nga giya) mao ang abort.h. Kung imong i-klik ang link abort.h, ipadala ka sa source file para sa abort.h, nga adunay mapuslanon nga mga macro alang sa paggawas sa mga script kung makit-an ang dili normal nga mga kahimtang. Ang source code alang sa mga katabang nga among gigamit niini nga kapitulo makita sa direktoryo src/Applications/helper. Mobati nga gawasnon sa pagsudkod sa punoan sa direktoryo aron mahibal-an kung asa ug masabtan ang istilo sa mga programa sa ns-3.

Source: www.habr.com

Idugang sa usa ka comment