Fix issue with CBS
This commit is contained in:
@@ -64,9 +64,6 @@ Cbs::IsReadyToTransmit()
|
|||||||
{
|
{
|
||||||
NS_LOG_FUNCTION(this);
|
NS_LOG_FUNCTION(this);
|
||||||
if(m_credit>=0){
|
if(m_credit>=0){
|
||||||
if (m_state==WAITING){
|
|
||||||
UpdateCredit(false);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else{
|
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
|
void
|
||||||
Cbs::UpdateCredit(bool trigger_cb)
|
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 << ".");
|
NS_ASSERT_MSG(m_idleSlope < m_maxIdleSlope, "Trying to use an idleSlope higher than " << m_maxIdleSlope << ".");
|
||||||
|
|
||||||
Time sinceLastCreditUpdate = Simulator::Now() - m_lastUpdateCreditTime;
|
Time sinceLastCreditUpdate = Simulator::Now() - m_lastUpdateCreditTime;
|
||||||
NS_LOG_INFO(sinceLastCreditUpdate);
|
|
||||||
NS_LOG_INFO("State = " << m_state);
|
|
||||||
if(m_transmissionGateIsOpen){
|
if(m_transmissionGateIsOpen){
|
||||||
if(m_state == WAITING)
|
if(m_state == WAITING)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ class Cbs: public TsnTransmissionSelectionAlgo
|
|||||||
void TransmitStart(Ptr<Packet> p, Time txTime) override;
|
void TransmitStart(Ptr<Packet> p, Time txTime) override;
|
||||||
void TransmitComplete(Ptr<Packet> p) override;
|
void TransmitComplete(Ptr<Packet> p) override;
|
||||||
void UpdateTransmissionGate(bool IsOpen) override;
|
void UpdateTransmissionGate(bool IsOpen) override;
|
||||||
|
void Update() override;
|
||||||
|
|
||||||
|
|
||||||
TracedCallback<double> m_creditTrace;
|
TracedCallback<double> m_creditTrace;
|
||||||
|
|||||||
@@ -111,6 +111,12 @@ int
|
|||||||
TsnNetDevice::TransmitSelection()
|
TsnNetDevice::TransmitSelection()
|
||||||
{
|
{
|
||||||
NS_LOG_FUNCTION(this);
|
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; )
|
for (int i = m_queues.size(); i --> 0; )
|
||||||
{
|
{
|
||||||
if(!m_queues[i]->IsEmpty() && m_tas->IsGateOpen(i))
|
if(!m_queues[i]->IsEmpty() && m_tas->IsGateOpen(i))
|
||||||
|
|||||||
@@ -90,13 +90,18 @@ TsnTransmissionSelectionAlgo::UpdateTransmissionGate(bool IsOpen)
|
|||||||
m_transmissionGateIsOpen = IsOpen;
|
m_transmissionGateIsOpen = IsOpen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TsnTransmissionSelectionAlgo::Update()
|
||||||
|
{
|
||||||
|
NS_LOG_FUNCTION(this);
|
||||||
|
}
|
||||||
|
|
||||||
Time
|
Time
|
||||||
TsnTransmissionSelectionAlgo::GetHardwareLatency()
|
TsnTransmissionSelectionAlgo::GetHardwareLatency()
|
||||||
{
|
{
|
||||||
NS_LOG_FUNCTION(this);
|
NS_LOG_FUNCTION(this);
|
||||||
Ptr<UniformRandomVariable> randVar = CreateObject<UniformRandomVariable>();
|
Ptr<UniformRandomVariable> randVar = CreateObject<UniformRandomVariable>();
|
||||||
return NanoSeconds(randVar->GetValue(m_minLatencyOverhead.GetNanoSeconds(), m_maxLatencyOverhead.GetNanoSeconds()));
|
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 TransmitComplete(Ptr<Packet> p);
|
||||||
|
|
||||||
virtual void UpdateTransmissionGate(bool IsOpen);
|
virtual void UpdateTransmissionGate(bool IsOpen);
|
||||||
|
virtual void Update();
|
||||||
|
|
||||||
Time GetHardwareLatency();
|
Time GetHardwareLatency();
|
||||||
|
|
||||||
@@ -59,7 +60,6 @@ class TsnTransmissionSelectionAlgo: public Object
|
|||||||
Callback<void> ReadyToTransmitCallback;
|
Callback<void> ReadyToTransmitCallback;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Time m_minLatencyOverhead;
|
Time m_minLatencyOverhead;
|
||||||
Time m_maxLatencyOverhead;
|
Time m_maxLatencyOverhead;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user