Hi,
you're looking at the wrong part of the function.
Simulator::Schedule (m_delay, &CsmaChannel::PropagationCompleteEvent, this);
is only changing the channel status to idle.
If you want to signal the nodes (i.e., the CsmaNetDevice) that the channel is idle, then you should use an iterator, i.e., something similar to:
std::vector<CsmaDeviceRec>::iterator it;
for (it = m_deviceList.begin (); it < m_deviceList.end (); it++)
{
if (it->IsActive ())
{
// schedule reception events
Simulator::ScheduleWithContext (it->devicePtr->GetNode ()->GetId (),
m_delay,
&CsmaNetDevice::Receive, it->devicePtr,
m_currentPkt->Copy (), m_deviceList[m_currentSrc].devicePtr);
}
}
However, this is actually not really necessary. When CsmaNetDevice::Receive is called, you know that the channel is going be idle "soon".
Hope this helps,
T.