summaryrefslogtreecommitdiff
path: root/src/dev/etherdevice.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/dev/etherdevice.hh')
-rw-r--r--src/dev/etherdevice.hh28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/dev/etherdevice.hh b/src/dev/etherdevice.hh
index 5d86275b4..81e5535b0 100644
--- a/src/dev/etherdevice.hh
+++ b/src/dev/etherdevice.hh
@@ -39,6 +39,7 @@
#include "base/statistics.hh"
#include "dev/pcidev.hh"
#include "params/EtherDevice.hh"
+#include "params/EtherDevBase.hh"
#include "sim/sim_object.hh"
class EtherInt;
@@ -120,4 +121,31 @@ class EtherDevice : public PciDev
Stats::Scalar droppedPackets;
};
+/**
+ * Dummy class to keep the Python class hierarchy in sync with the C++
+ * object hierarchy.
+ *
+ * The Python object hierarchy includes the EtherDevBase class which
+ * is used by some ethernet devices as a way to share common
+ * configuration information in the generated param structs. Since the
+ * Python hierarchy is used to generate a SWIG interface for all C++
+ * SimObjects, we need to reflect this in the C++ object hierarchy. If
+ * we don't, SWIG might end up doing 'bad things' when it down casts
+ * ethernet objects to their base class(es).
+ */
+class EtherDevBase : public EtherDevice
+{
+ public:
+ EtherDevBase(const EtherDevBaseParams *params)
+ : EtherDevice(params)
+ {}
+
+ const EtherDevBaseParams *
+ params() const
+ {
+ return dynamic_cast<const EtherDevBaseParams *>(_params);
+ }
+
+};
+
#endif //__DEV_ETHERDEVICE_HH__