merge bug 213 repo

This commit is contained in:
Mathieu Lacage
2008-06-13 17:20:55 -07:00
15 changed files with 414 additions and 203 deletions

View File

@@ -346,8 +346,10 @@ TcpSocketImpl::Connect (const Address & address)
}
return -1;
}
//p here is just data, no headers
int
TcpSocketImpl::Send (const Ptr<Packet> p) //p here is just data, no headers
TcpSocketImpl::Send (Ptr<Packet> p, uint32_t flags)
{
NS_LOG_FUNCTION (this << p);
if (m_state == ESTABLISHED || m_state == SYN_SENT || m_state == CLOSE_WAIT)
@@ -382,11 +384,6 @@ TcpSocketImpl::Send (const Ptr<Packet> p) //p here is just data, no headers
}
}
int TcpSocketImpl::Send (const uint8_t* buf, uint32_t size)
{
return Send (Create<Packet> (buf, size));
}
int TcpSocketImpl::DoSendTo (Ptr<Packet> p, const Address &address)
{
NS_LOG_FUNCTION (this << p << address);
@@ -420,7 +417,7 @@ int TcpSocketImpl::DoSendTo (Ptr<Packet> p, Ipv4Address ipv4, uint16_t port)
}
int
TcpSocketImpl::SendTo (Ptr<Packet> p, const Address &address)
TcpSocketImpl::SendTo (Ptr<Packet> p, uint32_t flags, const Address &address)
{
NS_LOG_FUNCTION (this << address << p);
if (!m_connected)
@@ -430,7 +427,7 @@ TcpSocketImpl::SendTo (Ptr<Packet> p, const Address &address)
}
else
{
return Send (p); //drop the address according to BSD manpages
return Send (p, flags); //drop the address according to BSD manpages
}
}
@@ -532,6 +529,23 @@ TcpSocketImpl::GetRxAvailable (void) const
return m_rxAvailable;
}
Ptr<Packet>
TcpSocketImpl::RecvFrom (uint32_t maxSize, uint32_t flags,
Address &fromAddress)
{
NS_LOG_FUNCTION (this << maxSize << flags);
Ptr<Packet> packet = Recv (maxSize, flags);
if (packet != 0)
{
SocketAddressTag tag;
bool found;
found = packet->FindFirstMatchingTag (tag);
NS_ASSERT (found);
fromAddress = tag.GetAddress ();
}
return packet;
}
void
TcpSocketImpl::ForwardUp (Ptr<Packet> packet, Ipv4Address ipv4, uint16_t port)
{
@@ -1048,7 +1062,7 @@ void TcpSocketImpl::NewRx (Ptr<Packet> p,
m_nextRxSequence += s; // Advance next expected sequence
//bytesReceived += s; // Statistics
NS_LOG_LOGIC("Case 1, advanced nrxs to " << m_nextRxSequence );
SocketRxAddressTag tag;
SocketAddressTag tag;
tag.SetAddress (fromAddress);
p->AddTag (tag);
//buffer this, it'll be read by call to Recv
@@ -1106,7 +1120,7 @@ void TcpSocketImpl::NewRx (Ptr<Packet> p,
i->second = 0; // relase reference to already buffered
}
// Save for later delivery
SocketRxAddressTag tag;
SocketAddressTag tag;
tag.SetAddress (fromAddress);
p->AddTag (tag);
m_bufferedData[tcpHeader.GetSequenceNumber () ] = p;

View File

@@ -79,14 +79,14 @@ public:
virtual int ShutdownSend (void);
virtual int ShutdownRecv (void);
virtual int Connect(const Address &address);
virtual int Send (Ptr<Packet> p);
virtual int Send (const uint8_t* buf, uint32_t size);
virtual int SendTo(Ptr<Packet> p, const Address &address);
virtual uint32_t GetTxAvailable (void) const;
virtual int Listen(uint32_t queueLimit);
virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
virtual uint32_t GetTxAvailable (void) const;
virtual int Send (Ptr<Packet> p, uint32_t flags);
virtual int SendTo(Ptr<Packet> p, uint32_t flags, const Address &toAddress);
virtual uint32_t GetRxAvailable (void) const;
virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags,
Address &fromAddress);
private:
friend class Tcp;

View File

@@ -224,9 +224,9 @@ UdpSocketImpl::Listen (uint32_t queueLimit)
}
int
UdpSocketImpl::Send (Ptr<Packet> p)
UdpSocketImpl::Send (Ptr<Packet> p, uint32_t flags)
{
NS_LOG_FUNCTION (this << p);
NS_LOG_FUNCTION (this << p << flags);
if (!m_connected)
{
@@ -239,7 +239,7 @@ UdpSocketImpl::Send (Ptr<Packet> p)
int
UdpSocketImpl::DoSend (Ptr<Packet> p)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << p);
if (m_endPoint == 0)
{
if (Bind () == -1)
@@ -380,19 +380,28 @@ UdpSocketImpl::GetTxAvailable (void) const
}
int
UdpSocketImpl::SendTo (Ptr<Packet> p, const Address &address)
UdpSocketImpl::SendTo (Ptr<Packet> p, uint32_t flags, const Address &address)
{
NS_LOG_FUNCTION (this << address << p);
NS_LOG_FUNCTION (this << p << flags << address);
InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
Ipv4Address ipv4 = transport.GetIpv4 ();
uint16_t port = transport.GetPort ();
return DoSendTo (p, ipv4, port);
}
uint32_t
UdpSocketImpl::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;
}
Ptr<Packet>
UdpSocketImpl::Recv (uint32_t maxSize, uint32_t flags)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << maxSize << flags);
if (m_deliveryQueue.empty() )
{
return 0;
@@ -410,13 +419,21 @@ UdpSocketImpl::Recv (uint32_t maxSize, uint32_t flags)
return p;
}
uint32_t
UdpSocketImpl::GetRxAvailable (void) const
Ptr<Packet>
UdpSocketImpl::RecvFrom (uint32_t maxSize, uint32_t flags,
Address &fromAddress)
{
NS_LOG_FUNCTION_NOARGS ();
// We separately maintain this state to avoid walking the queue
// every time this might be called
return m_rxAvailable;
NS_LOG_FUNCTION (this << maxSize << flags);
Ptr<Packet> packet = Recv (maxSize, flags);
if (packet != 0)
{
SocketAddressTag tag;
bool found;
found = packet->FindFirstMatchingTag (tag);
NS_ASSERT (found);
fromAddress = tag.GetAddress ();
}
return packet;
}
void
@@ -431,7 +448,7 @@ UdpSocketImpl::ForwardUp (Ptr<Packet> packet, Ipv4Address ipv4, uint16_t port)
if ((m_rxAvailable + packet->GetSize ()) <= m_rcvBufSize)
{
Address address = InetSocketAddress (ipv4, port);
SocketRxAddressTag tag;
SocketAddressTag tag;
tag.SetAddress (address);
packet->AddTag (tag);
m_deliveryQueue.push (packet);
@@ -638,7 +655,7 @@ UdpSocketImplTest::RunTests (void)
// Unicast test
m_receivedPacket = Create<Packet> ();
m_receivedPacket2 = Create<Packet> ();
NS_TEST_ASSERT_EQUAL (txSocket->SendTo ( Create<Packet> (123),
NS_TEST_ASSERT_EQUAL (txSocket->SendTo ( Create<Packet> (123), 0,
InetSocketAddress (Ipv4Address("10.0.0.1"), 1234)), 123);
Simulator::Run ();
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
@@ -651,7 +668,7 @@ UdpSocketImplTest::RunTests (void)
m_receivedPacket = Create<Packet> ();
m_receivedPacket2 = Create<Packet> ();
NS_TEST_ASSERT_EQUAL (txSocket->SendTo ( Create<Packet> (123),
NS_TEST_ASSERT_EQUAL (txSocket->SendTo ( Create<Packet> (123), 0,
InetSocketAddress (Ipv4Address("255.255.255.255"), 1234)), 123);
Simulator::Run ();
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
@@ -673,7 +690,7 @@ UdpSocketImplTest::RunTests (void)
m_receivedPacket = Create<Packet> ();
m_receivedPacket2 = Create<Packet> ();
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (Create<Packet> (123),
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (Create<Packet> (123), 0,
InetSocketAddress (Ipv4Address("255.255.255.255"), 1234)), 123);
Simulator::Run ();
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);

View File

@@ -65,12 +65,13 @@ public:
virtual int ShutdownRecv (void);
virtual int Connect(const Address &address);
virtual int Listen (uint32_t queueLimit);
virtual int Send (Ptr<Packet> p);
virtual int SendTo (Ptr<Packet> p, const Address &address);
virtual uint32_t GetTxAvailable (void) const;
virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
virtual int Send (Ptr<Packet> p, uint32_t flags);
virtual int SendTo (Ptr<Packet> p, uint32_t flags, const Address &address);
virtual uint32_t GetRxAvailable (void) const;
virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags,
Address &fromAddress);
private:
// Attributes set through UdpSocket base class