Fix issue with CBS
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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()));
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user