Fix dumping to work on the opteron. struct timeval can

vary in size, so we're explicit about the fields.

--HG--
extra : convert_revision : e5264849dafb878676b2bfd3a6e6f95f6f94ea48
This commit is contained in:
Nathan Binkert 2004-02-29 17:05:23 -05:00
parent b491bda241
commit 2272164d66

View file

@ -34,6 +34,7 @@
#include <string>
#include "base/misc.hh"
#include "dev/etherdump.hh"
#include "sim/builder.hh"
#include "sim/universe.hh"
@ -63,7 +64,8 @@ struct pcap_file_header {
};
struct pcap_pkthdr {
struct timeval ts; // time stamp
uint32_t seconds;
uint32_t microseconds;
uint32_t caplen; // length of portion present
uint32_t len; // length this packet (off wire)
};
@ -96,8 +98,8 @@ EtherDump::init()
* to sim_cycles.
*/
pcap_pkthdr pkthdr;
pkthdr.ts.tv_sec = curtime;
pkthdr.ts.tv_usec = 0;
pkthdr.seconds = curtime;
pkthdr.microseconds = 0;
pkthdr.caplen = 0;
pkthdr.len = 0;
stream.write(reinterpret_cast<char *>(&pkthdr), sizeof(pkthdr));
@ -109,8 +111,8 @@ void
EtherDump::dumpPacket(PacketPtr &packet)
{
pcap_pkthdr pkthdr;
pkthdr.ts.tv_sec = curtime + (curTick / s_freq);
pkthdr.ts.tv_usec = (curTick / us_freq) % ULL(1000000);
pkthdr.seconds = curtime + (curTick / s_freq);
pkthdr.microseconds = (curTick / us_freq) % ULL(1000000);
pkthdr.caplen = packet->length;
pkthdr.len = packet->length;
stream.write(reinterpret_cast<char *>(&pkthdr), sizeof(pkthdr));