|
|
| 54 |
|
54 |
|
| 55 |
class UdpSocketImpl; |
55 |
class UdpSocketImpl; |
| 56 |
|
56 |
|
|
|
57 |
/* ---------------------------------------------------------------------------------- |
| 58 |
* Tag |
| 59 |
--------------------------------------------------------------------------------- */ |
| 60 |
class IPv4TestTag : public Tag { |
| 61 |
private: |
| 62 |
uint64_t token; |
| 63 |
public: |
| 64 |
static TypeId GetTypeId () { |
| 65 |
static TypeId tid = TypeId ("ns3::IPv4TestTag").SetParent<Tag> ().AddConstructor<IPv4TestTag> (); |
| 66 |
return tid; |
| 67 |
} |
| 68 |
virtual TypeId GetInstanceTypeId () const { return GetTypeId (); } |
| 69 |
virtual uint32_t GetSerializedSize () const { return sizeof (token); } |
| 70 |
virtual void Serialize (TagBuffer buffer) const { buffer.WriteU64 (token); } |
| 71 |
virtual void Deserialize (TagBuffer buffer) { token = buffer.ReadU64 (); } |
| 72 |
virtual void Print (std::ostream &os) const { os << "token=" << token; } |
| 73 |
void setToken (uint64_t token) { this->token = token; } |
| 74 |
uint64_t getToken () { return token; } |
| 75 |
}; |
| 76 |
|
| 57 |
static void |
77 |
static void |
| 58 |
AddInternetStack (Ptr<Node> node) |
78 |
AddInternetStack (Ptr<Node> node) |
| 59 |
{ |
79 |
{ |
|
|
| 161 |
{ |
181 |
{ |
| 162 |
if (InetSocketAddress::IsMatchingType (from)) |
182 |
if (InetSocketAddress::IsMatchingType (from)) |
| 163 |
{ |
183 |
{ |
| 164 |
packet->RemoveAllPacketTags (); |
|
|
| 165 |
packet->RemoveAllByteTags (); |
| 166 |
|
| 167 |
m_receivedPacketServer = packet->Copy(); |
184 |
m_receivedPacketServer = packet->Copy(); |
| 168 |
} |
185 |
} |
| 169 |
} |
186 |
} |
|
|
| 247 |
{ |
264 |
{ |
| 248 |
p = Create<Packet> (m_size); |
265 |
p = Create<Packet> (m_size); |
| 249 |
} |
266 |
} |
|
|
267 |
IPv4TestTag tag; |
| 268 |
tag.setToken (42); |
| 269 |
p->AddPacketTag (tag); |
| 270 |
p->AddByteTag (tag); |
| 271 |
|
| 250 |
m_socketClient->Send (p); |
272 |
m_socketClient->Send (p); |
| 251 |
|
273 |
|
| 252 |
return p; |
274 |
return p; |
|
|
| 398 |
NS_TEST_EXPECT_MSG_EQ ((m_icmpType == 11), true, "Client did not receive ICMP::TIME_EXCEEDED"); |
420 |
NS_TEST_EXPECT_MSG_EQ ((m_icmpType == 11), true, "Client did not receive ICMP::TIME_EXCEEDED"); |
| 399 |
} |
421 |
} |
| 400 |
|
422 |
|
|
|
423 |
// Fourth test: normal channel, no errors, no delays. |
| 424 |
// We check tags |
| 425 |
clientDevErrorModel->Disable(); |
| 426 |
serverDevErrorModel->Disable(); |
| 427 |
for( int i= 0; i<5; i++) |
| 428 |
{ |
| 429 |
uint32_t packetSize = packetSizes[i]; |
| 430 |
|
| 431 |
SetFill (fillData, 78, packetSize); |
| 432 |
|
| 433 |
m_receivedPacketServer = Create<Packet> (); |
| 434 |
Simulator::ScheduleWithContext (m_socketClient->GetNode ()->GetId (), Seconds (0), |
| 435 |
&Ipv4FragmentationTest::SendClient, this); |
| 436 |
Simulator::Run (); |
| 437 |
|
| 438 |
IPv4TestTag packetTag; |
| 439 |
bool found = m_receivedPacketServer->PeekPacketTag (packetTag); |
| 440 |
|
| 441 |
NS_TEST_EXPECT_MSG_EQ (found, true, "PacketTag not found"); |
| 442 |
NS_TEST_EXPECT_MSG_EQ (packetTag.getToken (), 42, "PacketTag value not correct"); |
| 443 |
|
| 444 |
ByteTagIterator i = m_receivedPacketServer->GetByteTagIterator (); |
| 445 |
|
| 446 |
uint32_t end = 0; |
| 447 |
uint32_t tagStart = 0; |
| 448 |
uint32_t tagEnd = 0; |
| 449 |
while (i.HasNext ()) |
| 450 |
{ |
| 451 |
ByteTagIterator::Item item = i.Next (); |
| 452 |
NS_TEST_EXPECT_MSG_EQ (item.GetTypeId ().GetName (), "ns3::IPv4TestTag", "ByteTag name not correct"); |
| 453 |
tagStart = item.GetStart (); |
| 454 |
tagEnd = item.GetEnd (); |
| 455 |
if (end == 0) |
| 456 |
{ |
| 457 |
NS_TEST_EXPECT_MSG_EQ (tagStart, 0, "First ByteTag Start not correct"); |
| 458 |
} |
| 459 |
if (end != 0) |
| 460 |
{ |
| 461 |
NS_TEST_EXPECT_MSG_EQ (tagStart, end, "ByteTag End not correct"); |
| 462 |
} |
| 463 |
end = tagEnd; |
| 464 |
IPv4TestTag *byteTag = dynamic_cast<IPv4TestTag *> (item.GetTypeId ().GetConstructor () ()); |
| 465 |
NS_TEST_EXPECT_MSG_NE (byteTag, 0, "ByteTag not found"); |
| 466 |
item.GetTag (*byteTag); |
| 467 |
NS_TEST_EXPECT_MSG_EQ (byteTag->getToken (), 42, "ByteTag value not correct"); |
| 468 |
} |
| 469 |
NS_TEST_EXPECT_MSG_EQ (end, m_receivedPacketServer->GetSize (), "trivial"); |
| 470 |
} |
| 471 |
|
| 401 |
|
472 |
|
| 402 |
Simulator::Destroy (); |
473 |
Simulator::Destroy (); |
| 403 |
} |
474 |
} |