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; | |
NS_LOG_COMPONENT_DEFINE ("Topologia Estrella"); | |
PointToPointStarHelper generaTrafico( PointToPointStarHelper star, uint16_t portNumber ){ | |
//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( 30.0 ) ); | |
return star; | |
} | |
int main (int argc, char *argv[]) { | |
//Numero de nodos usados en la topologia | |
uint32_t numberOfNodes = 20; | |
//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")); | |
AsciiTraceHelper ascii; | |
pointToPoint.EnableAsciiAll(ascii.CreateFileStream ("file.tr")); | |
//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; | |
star = generaTrafico( star, portNumber); | |
//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; | |
} |
Esto es una animación de ejemplo de la topología generada en el código:


Pues, hubiera querido ver alguna clase de gráfica sobre las medidas de desempeño... Van 6 pts, ya que le puse 6 a Roberto aunque no tenía nada de esas gráficas tampoco.
ResponderEliminar