Fix issue with CBS

This commit is contained in:
2025-12-02 11:43:04 +01:00
parent cd9ba93d58
commit c93ec89664
5 changed files with 34 additions and 7 deletions

View File

@@ -64,9 +64,6 @@ Cbs::IsReadyToTransmit()
{
NS_LOG_FUNCTION(this);
if(m_credit>=0){
if (m_state==WAITING){
UpdateCredit(false);
}
return true;
}
else{
@@ -75,6 +72,26 @@ Cbs::IsReadyToTransmit()
}
}
void
Cbs::Update()
{
NS_LOG_FUNCTION(this);
if (m_state != TRANSMITTING)
{
if (m_queue->IsEmpty())
{
m_state = IDLE;
}
else
{
m_state = WAITING;
}
}
UpdateCredit(false);
}
void
Cbs::UpdateCredit(bool trigger_cb)
{
@@ -82,8 +99,6 @@ Cbs::UpdateCredit(bool trigger_cb)
NS_ASSERT_MSG(m_idleSlope < m_maxIdleSlope, "Trying to use an idleSlope higher than " << m_maxIdleSlope << ".");
Time sinceLastCreditUpdate = Simulator::Now() - m_lastUpdateCreditTime;
NS_LOG_INFO(sinceLastCreditUpdate);
NS_LOG_INFO("State = " << m_state);
if(m_transmissionGateIsOpen){
if(m_state == WAITING)
{

View File

@@ -40,6 +40,7 @@ class Cbs: public TsnTransmissionSelectionAlgo
void TransmitStart(Ptr<Packet> p, Time txTime) override;
void TransmitComplete(Ptr<Packet> p) override;
void UpdateTransmissionGate(bool IsOpen) override;
void Update() override;
TracedCallback<double> m_creditTrace;

View File

@@ -111,6 +111,12 @@ int
TsnNetDevice::TransmitSelection()
{
NS_LOG_FUNCTION(this);
//Udpate Transmission selection algo states (e.g update cbs credit)
for (int i = m_queues.size(); i --> 0; )
{
m_transmissionSelectionAlgos[i]->Update();
}
for (int i = m_queues.size(); i --> 0; )
{
if(!m_queues[i]->IsEmpty() && m_tas->IsGateOpen(i))

View File

@@ -90,13 +90,18 @@ TsnTransmissionSelectionAlgo::UpdateTransmissionGate(bool IsOpen)
m_transmissionGateIsOpen = IsOpen;
}
void
TsnTransmissionSelectionAlgo::Update()
{
NS_LOG_FUNCTION(this);
}
Time
TsnTransmissionSelectionAlgo::GetHardwareLatency()
{
NS_LOG_FUNCTION(this);
Ptr<UniformRandomVariable> randVar = CreateObject<UniformRandomVariable>();
return NanoSeconds(randVar->GetValue(m_minLatencyOverhead.GetNanoSeconds(), m_maxLatencyOverhead.GetNanoSeconds()));
}
};

View File

@@ -48,6 +48,7 @@ class TsnTransmissionSelectionAlgo: public Object
virtual void TransmitComplete(Ptr<Packet> p);
virtual void UpdateTransmissionGate(bool IsOpen);
virtual void Update();
Time GetHardwareLatency();
@@ -59,7 +60,6 @@ class TsnTransmissionSelectionAlgo: public Object
Callback<void> ReadyToTransmitCallback;
private:
Time m_minLatencyOverhead;
Time m_maxLatencyOverhead;
};