src/internet/model/ipv4-l3-protocol.cc
changeset 10847 e72b8f4c25bb
parent 10707 bc08a6c3350b
child 10968 2d29fee2b7b8
--- a/src/internet/model/ipv4-l3-protocol.cc	Sun Jul 20 10:13:02 2014 +0200
+++ b/src/internet/model/ipv4-l3-protocol.cc	Sun Jul 20 11:29:28 2014 +0200
@@ -735,11 +735,17 @@
   ipHeader.SetPayloadSize (payloadSize);
   ipHeader.SetTtl (ttl);
   ipHeader.SetTos (tos);
+
+  uint64_t src = source.Get ();
+  uint64_t dst = destination.Get ();
+  uint64_t srcDst = dst | (src << 32);
+  std::pair<uint64_t, uint8_t> key = std::make_pair (srcDst, protocol);
+
   if (mayFragment == true)
     {
       ipHeader.SetMayFragment ();
-      ipHeader.SetIdentification (m_identification[protocol]);
-      m_identification[protocol]++;
+      ipHeader.SetIdentification (m_identification[key]);
+      m_identification[key]++;
     }
   else
     {
@@ -748,8 +754,8 @@
       // identification requirement:
       // >> Originating sources MAY set the IPv4 ID field of atomic datagrams
       //    to any value.
-      ipHeader.SetIdentification (m_identification[protocol]);
-      m_identification[protocol]++;
+      ipHeader.SetIdentification (m_identification[key]);
+      m_identification[key]++;
     }
   if (Node::ChecksumEnabled ())
     {
@@ -1524,5 +1530,4 @@
   m_fragments.erase (key);
   m_fragmentsTimers.erase (key);
 }
-
 } // namespace ns3