#include "ns3/core-module.
h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/lte-module.h"
#include "ns3/netanim-module.h" // Ajout du module d'animation
using namespace ns3;
// Définir la fonction pour mettre à jour les positions des nœuds
void UpdatePositions(AnimationInterface *anim, Ptr<Node> enb, Ptr<Node> ue,
Ptr<Node> pgw);
int main (int argc, char *argv[])
{
// Créer des nœuds
Ptr<Node> enb = CreateObject<Node> ();
Ptr<Node> ue = CreateObject<Node> ();
Ptr<Node> pgw = CreateObject<Node> (); // Ajout du PGW
// Installer les piles Internet sur les nœuds
InternetStackHelper internet;
[Link] (enb);
[Link] (ue);
[Link] (pgw); // Installer la pile Internet sur le PGW
// Configurer l'eNodeB
Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
lteHelper->SetEpcHelper (epcHelper);
// Configurer les canaux de communication
lteHelper->Attach (enb, pgw); // Attacher l'eNodeB au PGW
// Configurer les dispositifs pour les liaisons en downlink (DL) et uplink (UL)
NetDeviceContainer enbDev = lteHelper->InstallEnbDevice (enb);
NetDeviceContainer ueDev = lteHelper->InstallUeDevice (ue);
// Configurer les antennes
lteHelper->AttachToClosestEnb (ue);
// Activer la capture des statistiques
lteHelper->EnablePhyTraces ();
lteHelper->EnableMacTraces ();
lteHelper->EnableRlcTraces ();
lteHelper->EnablePdcpTraces ();
// Définir les positions des nœuds
enb->AggregateObject (CreateObject<MobilityModel> ());
ue->AggregateObject (CreateObject<MobilityModel> ());
// Créer un fichier de sortie XML pour l'animation
AnimationInterface anim("nom_du_fichier_animation.xml");
[Link](enb, 0.0, 0.0); // Position de l'eNodeB
[Link](ue, 1.0, 1.0); // Position de l'UE
[Link](pgw, 2.0, 2.0); // Position du PGW
// Configurer la simulation
Simulator::Stop (Seconds (10.0));
// Boucle de simulation
for (double simTime = 0.0; simTime <= 10.0; simTime += 0.1) {
// ... Votre code de simulation ...
// Mettre à jour les positions des nœuds pour l'animation
[Link](enb, simTime, 0.0, 0.0);
[Link](ue, simTime, 1.0, 1.0);
[Link](pgw, simTime, 2.0, 2.0);
Simulator::Schedule(Seconds(simTime + 0.1), &UpdatePositions, &anim, enb, ue,
pgw);
}
// Lancer la simulation
Simulator::Run ();
Simulator::Destroy ();
return 0;
}
void UpdatePositions(AnimationInterface *anim, Ptr<Node> enb, Ptr<Node> ue,
Ptr<Node> pgw) {
double simTime = Simulator::Now().GetSeconds();
anim->UpdateNodePosition(enb, simTime, 0.0, 0.0);
anim->UpdateNodePosition(ue, simTime, 1.0, 1.0);
anim->UpdateNodePosition(pgw, simTime, 2.0, 2.0);
}