From c93ec896649edc6bc62e8a10d76eefe38d94d628 Mon Sep 17 00:00:00 2001 From: BAILLEUL Quentin Date: Tue, 2 Dec 2025 11:43:04 +0100 Subject: [PATCH] Fix issue with CBS --- contrib/tsn/model/cbs.cc | 25 +++++++++++++++---- contrib/tsn/model/cbs.h | 1 + contrib/tsn/model/tsn-net-device.cc | 6 +++++ .../model/tsn-transmission-selection-algo.cc | 7 +++++- .../model/tsn-transmission-selection-algo.h | 2 +- 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/contrib/tsn/model/cbs.cc b/contrib/tsn/model/cbs.cc index e9b59a8..cb0593d 100644 --- a/contrib/tsn/model/cbs.cc +++ b/contrib/tsn/model/cbs.cc @@ -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) { diff --git a/contrib/tsn/model/cbs.h b/contrib/tsn/model/cbs.h index 9fa1567..130e7bc 100644 --- a/contrib/tsn/model/cbs.h +++ b/contrib/tsn/model/cbs.h @@ -40,6 +40,7 @@ class Cbs: public TsnTransmissionSelectionAlgo void TransmitStart(Ptr p, Time txTime) override; void TransmitComplete(Ptr p) override; void UpdateTransmissionGate(bool IsOpen) override; + void Update() override; TracedCallback m_creditTrace; diff --git a/contrib/tsn/model/tsn-net-device.cc b/contrib/tsn/model/tsn-net-device.cc index edce80b..4369ea2 100644 --- a/contrib/tsn/model/tsn-net-device.cc +++ b/contrib/tsn/model/tsn-net-device.cc @@ -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)) diff --git a/contrib/tsn/model/tsn-transmission-selection-algo.cc b/contrib/tsn/model/tsn-transmission-selection-algo.cc index 45d930a..477469c 100644 --- a/contrib/tsn/model/tsn-transmission-selection-algo.cc +++ b/contrib/tsn/model/tsn-transmission-selection-algo.cc @@ -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 randVar = CreateObject(); return NanoSeconds(randVar->GetValue(m_minLatencyOverhead.GetNanoSeconds(), m_maxLatencyOverhead.GetNanoSeconds())); - } }; diff --git a/contrib/tsn/model/tsn-transmission-selection-algo.h b/contrib/tsn/model/tsn-transmission-selection-algo.h index 674d66e..3bcd25f 100644 --- a/contrib/tsn/model/tsn-transmission-selection-algo.h +++ b/contrib/tsn/model/tsn-transmission-selection-algo.h @@ -48,6 +48,7 @@ class TsnTransmissionSelectionAlgo: public Object virtual void TransmitComplete(Ptr p); virtual void UpdateTransmissionGate(bool IsOpen); + virtual void Update(); Time GetHardwareLatency(); @@ -59,7 +60,6 @@ class TsnTransmissionSelectionAlgo: public Object Callback ReadyToTransmitCallback; private: - Time m_minLatencyOverhead; Time m_maxLatencyOverhead; };