Make etherdump timestamps zero-based.
authorSteve Reinhardt <steve.reinhardt@amd.com>
Wed, 18 Feb 2009 03:24:46 +0000 (19:24 -0800)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Wed, 18 Feb 2009 03:24:46 +0000 (19:24 -0800)
We previously used the actual wall time for the base timestamps,
making etherdumps non-deterministic.  This fixes that problem and
gets rid of the "malformed packet" at the front that we needed to
provide the right base timestamp to wireshark/tcpdump.

src/dev/etherdump.cc
src/dev/etherdump.hh

index 57da8a7f00ffb40acb5d8abed9ecf7093553b54d..c41ce4e1f4e62697f4ac124b629ffa5169d86135 100644 (file)
@@ -75,31 +75,18 @@ struct pcap_pkthdr {
 void
 EtherDump::init()
 {
-    curtime = time(NULL);
     struct pcap_file_header hdr;
     hdr.magic = TCPDUMP_MAGIC;
     hdr.version_major = PCAP_VERSION_MAJOR;
     hdr.version_minor = PCAP_VERSION_MINOR;
 
-    hdr.thiszone = -5 * 3600;
+    hdr.thiszone = 0;
     hdr.snaplen = 1500;
     hdr.sigfigs = 0;
     hdr.linktype = DLT_EN10MB;
 
     stream->write(reinterpret_cast<char *>(&hdr), sizeof(hdr));
 
-    /*
-     * output an empty packet with the current time so that we know
-     * when the simulation began.  This allows us to correlate packets
-     * to sim_cycles.
-     */
-    pcap_pkthdr pkthdr;
-    pkthdr.seconds = curtime;
-    pkthdr.microseconds = 0;
-    pkthdr.caplen = 0;
-    pkthdr.len = 0;
-    stream->write(reinterpret_cast<char *>(&pkthdr), sizeof(pkthdr));
-
     stream->flush();
 }
 
@@ -107,7 +94,7 @@ void
 EtherDump::dumpPacket(EthPacketPtr &packet)
 {
     pcap_pkthdr pkthdr;
-    pkthdr.seconds = curtime + (curTick / Clock::Int::s);
+    pkthdr.seconds = curTick / Clock::Int::s;
     pkthdr.microseconds = (curTick / Clock::Int::us) % ULL(1000000);
     pkthdr.caplen = std::min(packet->length, maxlen);
     pkthdr.len = packet->length;
index 733e61c97db9a1636e1cd70a086251df42641c4f..18a5d2c44ceedf7937ee8db7be4d5ba54274c2ab 100644 (file)
@@ -51,8 +51,6 @@ class EtherDump : public SimObject
     void dumpPacket(EthPacketPtr &packet);
     void init();
 
-    Tick curtime;
-
   public:
     typedef EtherDumpParams Params;
     EtherDump(const Params *p);