Я хотел отправить пакет с одного узла на другой, используя модуль «AquaSimNG» NS-3, который используется для моделирования подводных сетей.Я использовал «AquaSimTrafficGenHelper» для генерации трафика, но не могу найти способ убедиться, что пакет был успешно отправлен.Ведение журнала не помогает.Вот мой код:
#include <iostream>
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/mobility-module.h"
#include "ns3/aqua-sim-ng-module.h"
#include "ns3/applications-module.h"
#include "ns3/log.h"
#include "ns3/callback.h"
#include "ns3/netanim-module.h"
#include "ns3/point-to-point-module.h"
using namespace ns3;
using namespace std;
NS_LOG_COMPONENT_DEFINE ("2nodes");
int
main (int argc, char *argv[])
{
double simStop = 100; //seconds
int nodes = 1;
int sinks = 1;
string animFile = "Script.xml";
cout << "....Simulation Starts....\n";
Time::SetResolution (Time::NS);
LogComponentEnable ("AquaSimTrafficGen", LOG_INFO);
//Nodes creation
NodeContainer nodesCon;
nodesCon.Create(nodes);
//sink creation
NodeContainer sinksCon;
sinksCon.Create(sinks);
//InstallSockets
PacketSocketHelper socketHelper;
socketHelper.Install(nodesCon);
socketHelper.Install(sinksCon);
//establish layers using helper's pre-build settings
AquaSimChannelHelper channel = AquaSimChannelHelper::Default();
AquaSimHelper asHelper = AquaSimHelper::Default();
asHelper.SetChannel(channel.Create());
//Set up mobility model for nodes and sinks
MobilityHelper mobility;
MobilityHelper nodeMobility;
NetDeviceContainer devices;
Ptr<ListPositionAllocator> position = CreateObject<ListPositionAllocator> ();
Vector boundry = Vector(0,0,0);
cout << "...Creating Nodes....\n";
for (NodeContainer::Iterator i = nodesCon.Begin(); i != nodesCon.End(); i++)
{
Ptr<AquaSimNetDevice> newDevice = CreateObject<AquaSimNetDevice>();
position->Add(boundry);
// devices.Add(asHelper.Create(&(nodesCon(0)), newDevice1));
devices.Add(asHelper.Create(*i, newDevice));
cout<<"Node:" << newDevice->GetAddress() << " position(x):" << boundry.x<<"\n";
boundry.x += 10;
}
boundry.x += 10;
boundry.y += 10;
//SINK creation
cout<<"Sink's creation Iterator\n";
for (NodeContainer::Iterator i = sinksCon.Begin(); i != sinksCon.End(); i++)
{
Ptr<AquaSimNetDevice> newDevice = CreateObject<AquaSimNetDevice>();
position->Add(boundry);
devices.Add(asHelper.Create(*i, newDevice));
cout<<"Sink:" << newDevice->GetAddress() << " position(x):" << boundry.x << "\n";
// boundry.x += 100;
}
// Nodes Position
//sink mobility
mobility.SetPositionAllocator(position);
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
mobility.Install(sinksCon);
//node mobility
nodeMobility.SetPositionAllocator("ns3::UniformDiscPositionAllocator", "X", DoubleValue(1000.0),
"Y", DoubleValue(1000.0), "rho", DoubleValue(1000));
nodeMobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
nodeMobility.Install(nodesCon);
// Generate Traffic
PacketSocketAddress socket;
socket.SetAllDevices();
cout<<"\n befor physiacal affress: ... \n";
socket.SetPhysicalAddress (devices.Get(1)->GetAddress()); //Set dest to first sink (nodes+1 device)
socket.SetProtocol (0);
//Application Helper
AquaSimTrafficGenHelper traffic ("ns3::PacketSocketFactory", Address (socket));
traffic.SetAttribute ("Delay", DoubleValue(2));
traffic.SetAttribute ("PacketSize", UintegerValue(40));
//Application contaniner
ApplicationContainer apps = traffic.Install (nodesCon);
apps.Start (Seconds (0.5));
apps.Stop (Seconds (100));
Ptr<Node> sinkNode = sinksCon.Get(0);
TypeId psfid = TypeId::LookupByName ("ns3::PacketSocketFactory");
Ptr<Socket> sinkSocket = Socket::CreateSocket (sinkNode, psfid);
sinkSocket->Bind (socket);
AnimationInterface anim (animFile);
Simulator::Stop(Seconds(simStop));
Simulator::Run();
Simulator::Destroy();
cout << "...Simulation ends...\n";
return 0;
}
Код работает без ошибок.Но регистрация не показывает, был ли отправлен пакет или нет.Пожалуйста, дайте мне знать, если есть какие-либо проблемы с кодом и как я могу проверить, был ли отправлен пакет.Спасибо.