convert to Packet tags

This commit is contained in:
Mathieu Lacage
2009-03-23 20:39:46 +01:00
parent 538db7d163
commit 84c80b6e2e
5 changed files with 47 additions and 53 deletions

View File

@@ -565,7 +565,7 @@ WifiRemoteStation::PrepareForQueue (Ptr<const Packet> packet, uint32_t fullPacke
return;
}
TxModeTag tag = TxModeTag (DoGetRtsMode (), DoGetDataMode (fullPacketSize));
packet->AddTag (tag);
packet->AddPacketTag (tag);
}
WifiMode
WifiRemoteStation::GetDataMode (Ptr<const Packet> packet, uint32_t fullPacketSize)
@@ -576,7 +576,7 @@ WifiRemoteStation::GetDataMode (Ptr<const Packet> packet, uint32_t fullPacketSiz
}
TxModeTag tag;
bool found;
found = packet->FindFirstMatchingTag (tag);
found = ConstCast<Packet> (packet)->RemovePacketTag (tag);
NS_ASSERT (found);
return tag.GetDataMode ();
}
@@ -589,7 +589,7 @@ WifiRemoteStation::GetRtsMode (Ptr<const Packet> packet)
}
TxModeTag tag;
bool found;
found = packet->FindFirstMatchingTag (tag);
found = ConstCast<Packet> (packet)->RemovePacketTag (tag);
NS_ASSERT (found);
return tag.GetRtsMode ();
}

View File

@@ -607,7 +607,7 @@ Ipv4L3Protocol::Send (Ptr<Packet> packet,
m_identification ++;
SocketSetDontFragmentTag dfTag;
bool found = packet->FindFirstMatchingTag (dfTag);
bool found = packet->RemovePacketTag (dfTag);
if (found)
{
if (dfTag.IsEnabled ())
@@ -624,7 +624,7 @@ Ipv4L3Protocol::Send (Ptr<Packet> packet,
// Set TTL to 1 if it is a broadcast packet of any type. Otherwise,
// possibly override the default TTL if the packet is tagged
SocketIpTtlTag tag;
found = packet->FindFirstMatchingTag (tag);
found = packet->RemovePacketTag (tag);
if (destination.IsBroadcast ())
{
@@ -633,7 +633,6 @@ Ipv4L3Protocol::Send (Ptr<Packet> packet,
else if (found)
{
ipHeader.SetTtl (tag.GetTtl ());
// XXX remove tag here?
}
else
{

View File

@@ -544,6 +544,9 @@ TcpSocketImpl::Recv (uint32_t maxSize, uint32_t flags)
m_rxBufSize += i->second->GetSize()-avail;
}
}
SocketAddressTag tag;
tag.SetAddress (InetSocketAddress (m_remoteAddress, m_remotePort));
outPacket->AddPacketTag (tag);
return outPacket;
}
@@ -558,7 +561,7 @@ TcpSocketImpl::GetRxAvailable (void) const
Ptr<Packet>
TcpSocketImpl::RecvFrom (uint32_t maxSize, uint32_t flags,
Address &fromAddress)
Address &fromAddress)
{
NS_LOG_FUNCTION (this << maxSize << flags);
Ptr<Packet> packet = Recv (maxSize, flags);
@@ -567,7 +570,7 @@ TcpSocketImpl::RecvFrom (uint32_t maxSize, uint32_t flags,
{
SocketAddressTag tag;
bool found;
found = packet->FindFirstMatchingTag (tag);
found = packet->PeekPacketTag (tag);
NS_ASSERT (found);
fromAddress = tag.GetAddress ();
}
@@ -1166,9 +1169,6 @@ void TcpSocketImpl::NewRx (Ptr<Packet> p,
p = p->CreateFragment (0,s);
m_nextRxSequence += s; // Advance next expected sequence
NS_LOG_LOGIC("Case 1, advanced nrxs to " << m_nextRxSequence );
SocketAddressTag tag;
tag.SetAddress (fromAddress);
p->AddTag (tag);
//buffer this, it'll be read by call to Recv
UnAckData_t::iterator i =
m_bufferedData.find (tcpHeader.GetSequenceNumber () );
@@ -1236,9 +1236,6 @@ void TcpSocketImpl::NewRx (Ptr<Packet> p,
}
}
// Save for later delivery
SocketAddressTag tag;
tag.SetAddress (fromAddress);
p->AddTag (tag);
m_bufferedData[startSeq] = p;
i = m_bufferedData.find (startSeq);
next = i;
@@ -1265,9 +1262,6 @@ void TcpSocketImpl::NewRx (Ptr<Packet> p,
p = p->CreateFragment (m_nextRxSequence - tcpHeader.GetSequenceNumber (),s);
SequenceNumber start = m_nextRxSequence;
m_nextRxSequence += s; // Advance next expected sequence
SocketAddressTag tag;
tag.SetAddress (fromAddress);
p->AddTag (tag);
//buffer the new fragment, it'll be read by call to Recv
UnAckData_t::iterator i = m_bufferedData.find (start);
if (i != m_bufferedData.end () ) //we found it already in the buffer

View File

@@ -324,17 +324,17 @@ UdpSocketImpl::DoSendTo (Ptr<Packet> p, Ipv4Address dest, uint16_t port)
{
SocketIpTtlTag tag;
tag.SetTtl (m_ipMulticastTtl);
p->AddTag (tag);
p->AddPacketTag (tag);
}
else if (m_ipTtl != 0 && !dest.IsMulticast () && !dest.IsBroadcast ())
{
SocketIpTtlTag tag;
tag.SetTtl (m_ipTtl);
p->AddTag (tag);
p->AddPacketTag (tag);
}
{
SocketSetDontFragmentTag tag;
bool found = p->FindFirstMatchingTag (tag);
bool found = p->RemovePacketTag (tag);
if (!found)
{
if (m_mtuDiscover)
@@ -345,7 +345,7 @@ UdpSocketImpl::DoSendTo (Ptr<Packet> p, Ipv4Address dest, uint16_t port)
{
tag.Disable ();
}
p->AddTag (tag);
p->AddPacketTag (tag);
}
}
//
@@ -462,7 +462,7 @@ UdpSocketImpl::Recv (uint32_t maxSize, uint32_t flags)
Ptr<Packet>
UdpSocketImpl::RecvFrom (uint32_t maxSize, uint32_t flags,
Address &fromAddress)
Address &fromAddress)
{
NS_LOG_FUNCTION (this << maxSize << flags);
Ptr<Packet> packet = Recv (maxSize, flags);
@@ -470,7 +470,7 @@ UdpSocketImpl::RecvFrom (uint32_t maxSize, uint32_t flags,
{
SocketAddressTag tag;
bool found;
found = packet->FindFirstMatchingTag (tag);
found = packet->PeekPacketTag (tag);
NS_ASSERT (found);
fromAddress = tag.GetAddress ();
}
@@ -506,7 +506,7 @@ UdpSocketImpl::ForwardUp (Ptr<Packet> packet, Ipv4Address ipv4, uint16_t port)
Address address = InetSocketAddress (ipv4, port);
SocketAddressTag tag;
tag.SetAddress (address);
packet->AddTag (tag);
packet->AddPacketTag (tag);
m_deliveryQueue.push (packet);
m_rxAvailable += packet->GetSize ();
NotifyDataRecv ();
@@ -742,8 +742,8 @@ UdpSocketImplTest::RunTests (void)
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 0); // second interface should receive it
m_receivedPacket->RemoveAllTags ();
m_receivedPacket2->RemoveAllTags ();
m_receivedPacket->RemoveAllPacketTags ();
m_receivedPacket2->RemoveAllPacketTags ();
// Simple broadcast test
@@ -756,8 +756,8 @@ UdpSocketImplTest::RunTests (void)
// second socket should not receive it (it is bound specifically to the second interface's address
NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 0);
m_receivedPacket->RemoveAllTags ();
m_receivedPacket2->RemoveAllTags ();
m_receivedPacket->RemoveAllPacketTags ();
m_receivedPacket2->RemoveAllPacketTags ();
// Broadcast test with multiple receiving sockets
@@ -777,8 +777,8 @@ InetSocketAddress (Ipv4Address("255.255.255.255"), 1234)), 123);
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 123);
m_receivedPacket->RemoveAllTags ();
m_receivedPacket2->RemoveAllTags ();
m_receivedPacket->RemoveAllPacketTags ();
m_receivedPacket2->RemoveAllPacketTags ();
Simulator::Destroy ();

View File

@@ -52,7 +52,7 @@ PacketSocket::GetTypeId (void)
PacketSocket::PacketSocket () : m_rxAvailable (0)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this);
m_state = STATE_OPEN;
m_shutdownSend = false;
m_shutdownRecv = false;
@@ -64,40 +64,40 @@ PacketSocket::PacketSocket () : m_rxAvailable (0)
void
PacketSocket::SetNode (Ptr<Node> node)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << node);
m_node = node;
}
PacketSocket::~PacketSocket ()
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this);
}
void
PacketSocket::DoDispose (void)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this);
m_device = 0;
}
enum Socket::SocketErrno
PacketSocket::GetErrno (void) const
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this);
return m_errno;
}
Ptr<Node>
PacketSocket::GetNode (void) const
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this);
return m_node;
}
int
PacketSocket::Bind (void)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this);
PacketSocketAddress address;
address.SetProtocol (0);
address.SetAllDevices ();
@@ -107,7 +107,7 @@ PacketSocket::Bind (void)
int
PacketSocket::Bind (const Address &address)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << address);
if (!PacketSocketAddress::IsMatchingType (address))
{
m_errno = ERROR_INVAL;
@@ -120,7 +120,7 @@ PacketSocket::Bind (const Address &address)
int
PacketSocket::DoBind (const PacketSocketAddress &address)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << address);
if (m_state == STATE_BOUND ||
m_state == STATE_CONNECTED)
{
@@ -153,7 +153,7 @@ PacketSocket::DoBind (const PacketSocketAddress &address)
int
PacketSocket::ShutdownSend (void)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this);
if (m_state == STATE_CLOSED)
{
m_errno = ERROR_BADF;
@@ -166,7 +166,7 @@ PacketSocket::ShutdownSend (void)
int
PacketSocket::ShutdownRecv (void)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this);
if (m_state == STATE_CLOSED)
{
m_errno = ERROR_BADF;
@@ -179,7 +179,7 @@ PacketSocket::ShutdownRecv (void)
int
PacketSocket::Close(void)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this);
if (m_state == STATE_CLOSED)
{
m_errno = ERROR_BADF;
@@ -192,7 +192,7 @@ PacketSocket::Close(void)
int
PacketSocket::Connect(const Address &ad)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << ad);
PacketSocketAddress address;
if (m_state == STATE_CLOSED)
{
@@ -233,7 +233,7 @@ PacketSocket::Listen(void)
int
PacketSocket::Send (Ptr<Packet> p, uint32_t flags)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << p << flags);
if (m_state == STATE_OPEN ||
m_state == STATE_BOUND)
{
@@ -278,7 +278,7 @@ PacketSocket::GetTxAvailable (void) const
int
PacketSocket::SendTo (Ptr<Packet> p, uint32_t flags, const Address &address)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << p << flags << address);
PacketSocketAddress ad;
if (m_state == STATE_CLOSED)
{
@@ -351,7 +351,7 @@ PacketSocket::ForwardUp (Ptr<NetDevice> device, Ptr<const Packet> packet,
uint16_t protocol, const Address &from,
const Address &to, NetDevice::PacketType packetType)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << device << packet << protocol << from << to << packetType);
if (m_shutdownRecv)
{
return;
@@ -365,10 +365,11 @@ PacketSocket::ForwardUp (Ptr<NetDevice> device, Ptr<const Packet> packet,
if ((m_rxAvailable + packet->GetSize ()) <= m_rcvBufSize)
{
Ptr<Packet> copy = packet->Copy ();
SocketAddressTag tag;
tag.SetAddress (address);
packet->AddTag (tag);
m_deliveryQueue.push (packet->Copy ());
copy->AddPacketTag (tag);
m_deliveryQueue.push (copy);
m_rxAvailable += packet->GetSize ();
NS_LOG_LOGIC ("UID is " << packet->GetUid() << " PacketSocket " << this);
NotifyDataRecv ();
@@ -388,7 +389,7 @@ PacketSocket::ForwardUp (Ptr<NetDevice> device, Ptr<const Packet> packet,
uint32_t
PacketSocket::GetRxAvailable (void) const
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this);
// We separately maintain this state to avoid walking the queue
// every time this might be called
return m_rxAvailable;
@@ -397,7 +398,7 @@ PacketSocket::GetRxAvailable (void) const
Ptr<Packet>
PacketSocket::Recv (uint32_t maxSize, uint32_t flags)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << maxSize << flags);
if (m_deliveryQueue.empty() )
{
return 0;
@@ -418,13 +419,13 @@ PacketSocket::Recv (uint32_t maxSize, uint32_t flags)
Ptr<Packet>
PacketSocket::RecvFrom (uint32_t maxSize, uint32_t flags, Address &fromAddress)
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << maxSize << flags << fromAddress);
Ptr<Packet> packet = Recv (maxSize, flags);
if (packet != 0)
{
SocketAddressTag tag;
bool found;
found = packet->FindFirstMatchingTag (tag);
found = packet->PeekPacketTag (tag);
NS_ASSERT (found);
fromAddress = tag.GetAddress ();
}
@@ -434,7 +435,7 @@ PacketSocket::RecvFrom (uint32_t maxSize, uint32_t flags, Address &fromAddress)
int
PacketSocket::GetSockName (Address &address) const
{
NS_LOG_FUNCTION_NOARGS ();
NS_LOG_FUNCTION (this << address);
PacketSocketAddress ad = PacketSocketAddress::ConvertFrom(address);
ad.SetProtocol (m_protocol);