diff options
author | Steve Raasch <sraasch@umich.edu> | 2003-10-30 15:16:05 -0500 |
---|---|---|
committer | Steve Raasch <sraasch@umich.edu> | 2003-10-30 15:16:05 -0500 |
commit | fd232ecb6ad4bc60933feb3bd5b838c5e0231506 (patch) | |
tree | 9fd50bbb0d8ee1276746311fdc1dae41ab0dd653 /dev | |
parent | 2e2d2099689b1cf4d269542276dbe5cb047e5181 (diff) | |
parent | 48ce8b70e62a203b3aff4bacc35a2657c64fb762 (diff) | |
download | gem5-fd232ecb6ad4bc60933feb3bd5b838c5e0231506.tar.xz |
Merge zizzer.eecs.umich.edu:/m5/Bitkeeper/m5
into zizzer.eecs.umich.edu:/y/sraasch/serialize
--HG--
extra : convert_revision : ebb65c27685394826efc265bcc674577395e0963
Diffstat (limited to 'dev')
-rw-r--r-- | dev/ethertap.cc | 47 | ||||
-rw-r--r-- | dev/ethertap.hh | 3 |
2 files changed, 50 insertions, 0 deletions
diff --git a/dev/ethertap.cc b/dev/ethertap.cc index b99d46ce5..339e7ac78 100644 --- a/dev/ethertap.cc +++ b/dev/ethertap.cc @@ -163,6 +163,7 @@ EtherTap::detach() { DPRINTF(Ethernet, "EtherTap detached\n"); delete event; + event = 0; close(socket); socket = -1; } @@ -262,6 +263,52 @@ EtherTap::retransmit() txEvent.schedule(curTick + 1000); } +//===================================================================== + +void +EtherTap::serialize(ostream &os) +{ + SERIALIZE_SCALAR(socket); + SERIALIZE_SCALAR(buflen); + SERIALIZE_ARRAY((uint8_t *)buffer,buflen); + SERIALIZE_SCALAR(buffer_offset); + SERIALIZE_SCALAR(data_len); + + bool tapevent_present = false; + if (event) { + tapevent_present = true; + SERIALIZE_SCALAR(tapevent_present); + event->serialize(os); + } + else { + SERIALIZE_SCALAR(tapevent_present); + } +} + +void +EtherTap::unserialize(Checkpoint *cp, const std::string §ion) +{ + UNSERIALIZE_SCALAR(socket); + UNSERIALIZE_SCALAR(buflen); + UNSERIALIZE_ARRAY((uint8_t *)buffer,buflen); + UNSERIALIZE_SCALAR(buffer_offset); + UNSERIALIZE_SCALAR(data_len); + + bool tapevent_present; + UNSERIALIZE_SCALAR(tapevent_present); + if (tapevent_present) { + event = new TapEvent(this, socket, POLLIN|POLLERR); + + event->unserialize(cp,section); + + if (event->queued()) { + pollQueue.schedule(event); + } + } +} + +//===================================================================== + BEGIN_DECLARE_SIM_OBJECT_PARAMS(EtherTap) SimObjectParam<EtherInt *> peer; diff --git a/dev/ethertap.hh b/dev/ethertap.hh index 6e99bd91d..e2b1f640f 100644 --- a/dev/ethertap.hh +++ b/dev/ethertap.hh @@ -96,6 +96,9 @@ class EtherTap : public EtherInt virtual bool recvPacket(PacketPtr packet); virtual void sendDone(); + + virtual void serialize(std::ostream &os); + virtual void unserialize(Checkpoint *cp, const std::string §ion); }; #endif // __ETHERTAP_HH__ |