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
This commit is contained in:
parent
1e2c16c912
commit
38da461fd7
|
@ -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,9 +1008,15 @@ 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.addr
|
||||
else:
|
||||
return self.value
|
||||
|
||||
# Special class for NULL pointers. Note the special check in
|
||||
|
|
Loading…
Reference in a new issue