Social Icons

twitterfacebookgoogle plusemail

martes, 16 de abril de 2013

Generación de tráfico en topología

Para la generación de tráfico en una topología simplemente se genero una función llamada "generaTrafico" la cual comienza ha hacer asignación de IP's a cada nodo existente en la topología y comienza a generar tráfico en la misma. Aquí esta el código:

//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:

1 comentarios:

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