Some tcp socket cleanup for buffer limits

This commit is contained in:
Tom Henderson
2008-05-11 22:12:16 -07:00
parent 4340da4ca6
commit 3ebec1046c
2 changed files with 26 additions and 25 deletions

View File

@@ -79,8 +79,9 @@ TcpSocket::GetTypeId ()
m_pendingData (0),
m_rtt (0),
m_lastMeasuredRtt (Seconds(0.0)),
m_rxAvailable (0), //XXX zero?
m_maxTxBuffer (65536) //interpret 0 as no limit, //XXX hook into default values
m_rxAvailable (0),
m_sndBufLimit (0xffffffff),
m_rcvBufLimit (0xffffffff)
{
NS_LOG_FUNCTION (this);
@@ -126,7 +127,8 @@ TcpSocket::TcpSocket(const TcpSocket& sock)
m_cnTimeout (sock.m_cnTimeout),
m_cnCount (sock.m_cnCount),
m_rxAvailable (0),
m_maxTxBuffer (0) //interpret 0 as no limit, //XXX hook into default values
m_sndBufLimit (0xffffffff),
m_rcvBufLimit (0xffffffff)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_LOGIC("Invoked the copy constructor");
@@ -436,25 +438,21 @@ TcpSocket::SendTo (const Address &address, Ptr<Packet> p)
}
}
// XXX Raj to make this functional
uint32_t
TcpSocket::GetTxAvailable (void) const
{
if (m_maxTxBuffer == 0) //interpret this as infinite buffer
{
return std::numeric_limits<uint32_t>::max ();
}
NS_LOG_FUNCTION_NOARGS ();
if (m_pendingData != 0)
{
uint32_t unAckedDataSize =
{
uint32_t unAckedDataSize =
m_pendingData->SizeFromSeq (m_firstPendingSequence, m_highestRxAck);
NS_ASSERT (m_maxTxBuffer >= unAckedDataSize); //else a logical error
return m_maxTxBuffer-unAckedDataSize;
}
NS_ASSERT (m_sndBufLimit >= unAckedDataSize); //else a logical error
return m_sndBufLimit-unAckedDataSize;
}
else
{
return m_maxTxBuffer;
}
{
return m_sndBufLimit;
}
}
int
@@ -469,6 +467,7 @@ TcpSocket::Listen (uint32_t q)
Ptr<Packet>
TcpSocket::Recv (uint32_t maxSize, uint32_t flags)
{
NS_LOG_FUNCTION_NOARGS ();
if (m_deliveryQueue.empty() )
{
return 0;
@@ -489,36 +488,38 @@ TcpSocket::Recv (uint32_t maxSize, uint32_t flags)
uint32_t
TcpSocket::GetRxAvailable (void) const
{
NS_LOG_FUNCTION_NOARGS ();
// We separately maintain this state to avoid walking the queue
// every time this might be called
return m_rxAvailable;
}
// XXX Raj to finish
void
TcpSocket::SetSndBuf (uint32_t size)
{
NS_LOG_FUNCTION_NOARGS ();
m_sndBufLimit = size;
}
// XXX Raj to finish
uint32_t
TcpSocket::GetSndBuf (void) const
{
return 0;
NS_LOG_FUNCTION_NOARGS ();
return m_sndBufLimit;
}
// XXX Raj to finish
void
TcpSocket::SetRcvBuf (uint32_t size)
{
NS_LOG_FUNCTION_NOARGS ();
m_rcvBufLimit = size;
}
// XXX Raj to finish
uint32_t
TcpSocket::GetRcvBuf (void) const
{
return 0;
NS_LOG_FUNCTION_NOARGS ();
return m_rcvBufLimit;
}
void

View File

@@ -187,8 +187,8 @@ private:
std::queue<Ptr<Packet> > m_deliveryQueue;
uint32_t m_rxAvailable;
// buffer limit for the outgoing queue
uint32_t m_maxTxBuffer;
uint32_t m_sndBufLimit; // buffer limit for the outgoing queue
uint32_t m_rcvBufLimit; // maximum receive socket buffer size
};
}//namespace ns3