El código que hace la simulación fue realizado en C++ como se puede apreciar en la parte de abajo.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Librerias usadas de ns3 | |
#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" | |
#include "ns3/netanim-module.h" | |
#include "ns3/point-to-point-layout-module.h" | |
using namespace ns3; | |
//Nombre del componente | |
NS_LOG_COMPONENT_DEFINE ("Topologia Estrella"); | |
int main (int argc, char *argv[]) { | |
//Numero de nodos usados en la topologia | |
uint32_t numberOfNodes = 8; | |
//Primero se crea una topologia base | |
PointToPointHelper pointToPoint; | |
//Asignacion de velocidad de datos | |
pointToPoint.SetDeviceAttribute("DataRate", StringValue("5Mbps")); | |
//Asignacion de retraso | |
pointToPoint.SetChannelAttribute("Delay", StringValue("2ms")); | |
//Creamos una topologia estrella donde toma como parametros | |
//el numero de nodos y la topologia base pointopoint | |
PointToPointStarHelper star(numberOfNodes, pointToPoint); | |
//Se crea la configuracion de los nodos y apartir de que ip se asignaran a los nodos | |
// y que mascara de subred se utilizara | |
InternetStackHelper internet; | |
star.InstallStack(internet); | |
star.AssignIpv4Addresses( Ipv4AddressHelper("10.1.1.0", "255.255.255.0") ); | |
//Numero de puerto que utilizamos | |
uint16_t portNumber = 9; | |
//Se asigna una direccion cualquiera con un numero de puerto | |
Address hub = InetSocketAddress( Ipv4Address::GetAny(), portNumber ); | |
//Se hace la asignacion del protocolo de transporte y se pasa como | |
//parametro el objeto hub que contiene la direccion y puerto asignado | |
PacketSinkHelper packetSinkHelper( "ns3::TcpSocketFactory", hub ); | |
//Apartir del objeto que tiene la informacion del protocolo se instala | |
//al nodo que sera el hub (nodo del centro) el protocolo de transporte | |
// y la direccion antes asignada con su puerto, en el cual este comenzara | |
// a generar trafico de datos al segundo 1.0 y se detiene al segundo 10 | |
ApplicationContainer hubApp = packetSinkHelper.Install( star.GetHub() ); | |
hubApp.Start( Seconds( 1.0 ) ); | |
hubApp.Stop( Seconds( 10.0 ) ); | |
//Se generara trafico con el protocolo de transporte TCP a una cierta direccion que mas adelante | |
//sera asignada | |
OnOffHelper onOffHelper( "ns3::TcpSocketFactory", Address() ); | |
//Se les asigna el tiempo de trafico "OnTime" y tiempo de no trafico "OffTime" | |
onOffHelper.SetAttribute( "OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]") ); | |
onOffHelper.SetAttribute( "OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]") ); | |
//Se crea el objeto que contiene los nodos y simula la capa de aplicacion | |
ApplicationContainer nodeApps; | |
//Se iteran los nodos de la topologia | |
for (uint32_t i = 0; i < star.SpokeCount() ; i++){ | |
//Se les asigna una direccion Ip y un puerto | |
AddressValue remoteAddress = AddressValue( InetSocketAddress ( star.GetHubIpv4Address(i), portNumber ) ); | |
onOffHelper.SetAttribute( "Remote", remoteAddress ); | |
//Se crea la capa de aplicacion que generara el trafico | |
nodeApps.Add( onOffHelper.Install( star.GetSpokeNode(i) ) ); | |
} | |
//Se asigna el tiempo de trafico | |
nodeApps.Start( Seconds( 1.0 ) ); | |
nodeApps.Stop( Seconds( 10.0 ) ); | |
//Nos ayuda | |
//Ipv4GlobalRoutingHelper::PopulateRoutingTables(); | |
//star.BoundingBox( 1, 1, 100, 100 ); | |
//Nos crea un archivo animation.xml con la informacion de la simulacion | |
AnimationInterface anim("animation.xml"); | |
//Se coloca el intervalo de tiempo de movimiento de la animacion | |
anim.SetMobilityPollInterval( Seconds( 1 ) ); | |
//Se habilita la animacion de intercambio de datos | |
anim.EnablePacketMetadata(true); | |
//Se corre la simulacion | |
Simulator::Run(); | |
//Se destruyen las referencias usadas | |
Simulator::Destroy(); | |
return 0; | |
} |
Esta es la animación presentada:
Video.
Foto.
GIF:
Pues, en realidad esperaba generadores que sepan crear dos o más tipos de topologías y que sepas variar el mecanismo de ruteo. 3 pts.
ResponderEliminar