--- a/src/devices/point-to-point/point-to-point-net-device.cc Tue Sep 23 16:38:51 2008 -0700 +++ a/src/devices/point-to-point/point-to-point-net-device.cc Wed Sep 24 14:10:04 2008 -0700 @@ -200,6 +200,10 @@ // // Got another packet off of the queue, so start the transmit process agin. // + if (!m_sendReadyCallback.IsNull()) // signal callback when we pop. + { + m_sendReadyCallback(); + } TransmitStart(p); } @@ -481,6 +485,13 @@ m_promiscCallback = cb; } +void +PointToPointNetDevice::SetSendReadyCallback(NetDevice::SendReadyCallback cb) +{ + NS_LOG_FUNCTION_NOARGS(); + m_sendReadyCallback = cb; +} + bool PointToPointNetDevice::SupportsSendFrom (void) const { --- a/src/devices/point-to-point/point-to-point-net-device.h Tue Sep 23 16:38:51 2008 -0700 +++ a/src/devices/point-to-point/point-to-point-net-device.h Wed Sep 24 14:10:04 2008 -0700 @@ -265,6 +265,7 @@ virtual void SetReceiveCallback (NetDevice::ReceiveCallback cb); virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb); + virtual void SetSendReadyCallback(NetDevice::SendReadyCallback cb); virtual bool SupportsSendFrom (void) const; private: @@ -410,6 +411,7 @@ Mac48Address m_address; NetDevice::ReceiveCallback m_rxCallback; NetDevice::PromiscReceiveCallback m_promiscCallback; + NetDevice::SendReadyCallback m_sendReadyCallback; uint32_t m_ifIndex; std::string m_name; bool m_linkUp; --- a/src/node/net-device.h Tue Sep 23 16:38:51 2008 -0700 +++ a/src/node/net-device.h Wed Sep 24 14:10:04 2008 -0700 @@ -122,6 +122,17 @@ * whenever the link goes up. */ virtual void SetLinkChangeCallback (Callback callback) = 0; + + /** + * Signal that the NetDevice has removed a packet from the Queue. + * params are TBD. return is TBD. + */ + typedef Callback< void > SendReadyCallback; + /** + * Register a callback to be invoked whenever a packet is removed + * from the Tx Queue. + */ + virtual void SetSendReadyCallback(SendReadyCallback cb) {}; /** * \return true if this interface supports a broadcast address, * false otherwise.