diff options
author | Nathan Binkert <binkertn@umich.edu> | 2005-08-15 16:12:19 -0400 |
---|---|---|
committer | Nathan Binkert <binkertn@umich.edu> | 2005-08-15 16:12:19 -0400 |
commit | 38da461fd79bcfd3eed683076f1ba40465af775e (patch) | |
tree | cd100f4597710cbe2fb611e2f6c59741aac48c71 /python | |
parent | 1e2c16c9124ed3f51229daa715a6c00c2b97f73d (diff) | |
download | gem5-38da461fd79bcfd3eed683076f1ba40465af775e.tar.xz |
Fix NextEthernetAddr
python/m5/config.py:
NextEthernetAddr shouldnt' be a Singleton since we want __init__ to be
called more than once.
Make the EthernetAddr class a "proxy" so that unproxy will
be called and NextEthernetAddr will generally work correctly.
--HG--
extra : convert_revision : c89bf268e805e202ae71030fcea4833867c7e477
Diffstat (limited to 'python')
-rw-r--r-- | python/m5/config.py | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/python/m5/config.py b/python/m5/config.py index a281feccc..3c49421d3 100644 --- a/python/m5/config.py +++ b/python/m5/config.py @@ -417,6 +417,9 @@ class SimObject(object): found_obj = match_obj return found_obj, found_obj != None + def unproxy(self, base): + return self + def print_ini(self): print '[' + self.path() + ']' # .ini section header @@ -632,7 +635,7 @@ class AnyProxy(BaseProxy): return 'any' def isproxy(obj): - if isinstance(obj, BaseProxy): + if isinstance(obj, (BaseProxy, EthernetAddr)): return True elif isinstance(obj, (list, tuple)): for v in obj: @@ -980,12 +983,11 @@ def IncEthernetAddr(addr, val = 1): return ':'.join(map(lambda x: '%02x' % x, bytes)) class NextEthernetAddr(object): - __metaclass__ = Singleton addr = "00:90:00:00:00:01" def __init__(self, inc = 1): - self.value = self.addr - self.addr = IncEthernetAddr(self.addr, inc) + self.value = NextEthernetAddr.addr + NextEthernetAddr.addr = IncEthernetAddr(NextEthernetAddr.addr, inc) class EthernetAddr(ParamValue): def __init__(self, value): @@ -1006,10 +1008,16 @@ class EthernetAddr(ParamValue): self.value = value + def unproxy(self, base): + if self.value == NextEthernetAddr: + self.addr = self.value().value + return self + def __str__(self): if self.value == NextEthernetAddr: - self.value = self.value().value - return self.value + return self.addr + else: + return self.value # Special class for NULL pointers. Note the special check in # make_param_value() above that lets these be assigned where a @@ -1027,7 +1035,7 @@ class NullSimObject(object): def ini_str(self): return 'Null' - def unproxy(self,base): + def unproxy(self, base): return self def set_path(self, parent, name): |