summaryrefslogtreecommitdiff
path: root/dev/etherdump.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dev/etherdump.cc')
-rw-r--r--dev/etherdump.cc20
1 files changed, 11 insertions, 9 deletions
diff --git a/dev/etherdump.cc b/dev/etherdump.cc
index 6d86adc32..b6d6bbe30 100644
--- a/dev/etherdump.cc
+++ b/dev/etherdump.cc
@@ -34,6 +34,7 @@
#include <string>
+#include "base/misc.hh"
#include "dev/etherdump.hh"
#include "sim/builder.hh"
#include "sim/universe.hh"
@@ -43,11 +44,8 @@ using std::string;
EtherDump::EtherDump(const string &name, const string &file)
: SimObject(name)
{
- if (!file.empty()) {
+ if (!file.empty())
stream.open(file.c_str());
- if (stream.is_open())
- init();
- }
}
#define DLT_EN10MB 1 // Ethernet (10Mb)
@@ -66,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)
};
@@ -74,6 +73,9 @@ struct pcap_pkthdr {
void
EtherDump::init()
{
+ if (!stream.is_open())
+ return;
+
curtime = time(NULL);
s_freq = ticksPerSecond;
us_freq = ticksPerSecond / ULL(1000000);
@@ -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));