Add jitter to the application

This commit is contained in:
2026-03-10 11:05:19 +01:00
parent 800258d03d
commit 5f4d7330b0
2 changed files with 18 additions and 1 deletions

View File

@@ -6,6 +6,7 @@
#include "ns3/socket.h"
#include "ns3/uinteger.h"
#include "ns3/names.h"
#include "ns3/double.h"
#include "ns3/ethernet-net-device.h"
#include <cstdio>
@@ -51,6 +52,11 @@ EthernetGenerator::GetTypeId()
TimeValue(Seconds(0)),
MakeTimeAccessor(&EthernetGenerator::m_interframe),
MakeTimeChecker())
.AddAttribute("Jitter",
"Jitter arround the period",
TimeValue(Seconds(0)),
MakeTimeAccessor(&EthernetGenerator::m_jitter),
MakeTimeChecker())
.AddAttribute("Offset",
"Time offset between application start and first packet emission",
TimeValue(Seconds(0)),
@@ -114,6 +120,11 @@ EthernetGenerator::StartApplication()
else if(m_payload_size < MIN_PAYLOAD_SIZE){
m_payload_size = MIN_PAYLOAD_SIZE;
}
m_randVar = CreateObject<UniformRandomVariable> ();
m_randVar->SetAttribute ("Min", DoubleValue ((m_period - m_jitter).GetNanoSeconds()));
m_randVar->SetAttribute ("Max", DoubleValue ((m_period + m_jitter).GetNanoSeconds()));
m_sendEvent = Simulator::Schedule(m_offset, &EthernetGenerator::SendBurst, this);
}
@@ -128,10 +139,12 @@ void
EthernetGenerator::SendBurst()
{
NS_LOG_FUNCTION(this);
NS_ASSERT(m_randVar != nullptr);
for (int i = 0; i < m_burst_size; i++) {
Simulator::Schedule(m_interframe*i, &EthernetGenerator::Send, this);
}
m_sendEvent = Simulator::Schedule(m_period, &EthernetGenerator::SendBurst, this);
Time period = NanoSeconds(m_randVar->GetValue());
m_sendEvent = Simulator::Schedule(period, &EthernetGenerator::SendBurst, this);
}
void

View File

@@ -4,6 +4,7 @@
#include "ns3/application.h"
#include "ns3/event-id.h"
#include "ns3/ptr.h"
#include "ns3/random-variable-stream.h"
#include <ns3/traced-callback.h>
#include "ns3/ethernet-net-device.h"
@@ -53,8 +54,11 @@ class EthernetGenerator : public Application
int m_burst_size;
Time m_period;
Time m_interframe;
Time m_jitter;
Time m_offset;
Ptr<UniformRandomVariable> m_randVar = nullptr;
uint16_t m_vid;
uint8_t m_pcp;
uint8_t m_dei;