THCI: recover whitelist and blacklist before reattach after reset (#1861)

* THCI: recover whitelist and blacklist before reattach after reset
This commit is contained in:
rongli
2017-06-01 18:48:05 -07:00
committed by Jonathan Hui
parent 1ef94cf7ec
commit 1c518dd8a1
+44 -4
View File
@@ -55,6 +55,8 @@ class OpenThread(IThci):
isPowerDown = False # indicate if Thread device experiences a power down event
isWhiteListEnabled = False # indicate if Thread device enables white list filter
isBlackListEnabled = False # indicate if Thread device enables black list filter
_whiteList = set() # cache whitelist devices when white list filter is enabled
_blackList = set() # cache blacklist devices when black list filter is enabled
isActiveCommissioner = False # indicate if Thread device is an active commissioner
_is_net = False # whether device is through ser2net
_lines = None # buffered lines read from device
@@ -462,9 +464,23 @@ class OpenThread(IThci):
else:
self.hasActiveDatasetToCommit = False
# restore whitelist if rejoin after reset
if self.isPowerDown and self.isWhiteListEnabled:
self.__enableWhiteList()
for addr in self._whiteList:
self.addAllowMAC(addr)
# restore blacklist if rejoin after reset
if self.isPowerDown and self.isBlackListEnabled:
self.__enableBlackList()
for addr in self._blackList:
self.addBlockedMAC(addr)
if self.__sendCommand('ifconfig up')[0] == 'Done':
self.__setRouterSelectionJitter(1)
return self.__sendCommand('thread start')[0] == 'Done'
if self.__sendCommand('thread start')[0] == 'Done':
self.isPowerDown = False
return True
else:
return False
except Exception, e:
@@ -903,7 +919,11 @@ class OpenThread(IThci):
"""
print '%s call addBlockedMAC' % self.port
print xEUI
macAddr = self.__convertLongToString(xEUI)
if isinstance(xEUI, str):
macAddr = xEUI
else:
macAddr = self.__convertLongToString(xEUI)
try:
# if blocked device is itself
if macAddr == self.mac:
@@ -915,6 +935,7 @@ class OpenThread(IThci):
cmd = 'blacklist add %s' % macAddr
print cmd
self._blackList.add(macAddr)
return self.__sendCommand(cmd)[0] == 'Done'
except Exception, e:
ModuleHelper.WriteIntoDebugLogger("addBlockedMAC() Error: " + str(e))
@@ -931,13 +952,18 @@ class OpenThread(IThci):
"""
print '%s call addAllowMAC' % self.port
print xEUI
macAddr = self.__convertLongToString(xEUI)
if isinstance(xEUI, str):
macAddr = xEUI
else:
macAddr = self.__convertLongToString(xEUI)
try:
if not self.isWhiteListEnabled:
self.__enableWhiteList()
cmd = 'whitelist add %s' % macAddr
print cmd
self._whiteList.add(macAddr)
return self.__sendCommand(cmd)[0] == 'Done'
except Exception, e:
ModuleHelper.WriteIntoDebugLogger("addAllowMAC() Error: " + str(e))
@@ -955,6 +981,7 @@ class OpenThread(IThci):
try:
if self.__sendCommand('blacklist clear')[0] == 'Done':
self.__disableBlackList()
self._blackList.clear()
return True
else:
return False
@@ -974,6 +1001,7 @@ class OpenThread(IThci):
try:
if self.__sendCommand('whitelist clear')[0] == 'Done':
self.__disableWhiteList()
self._whiteList.clear()
self.clearBlockList()
return True
else:
@@ -1096,8 +1124,8 @@ class OpenThread(IThci):
def powerDown(self):
"""power down the Thread device"""
print '%s call powerDown' % self.port
self.isPowerDown = True
self._sendline('reset')
self.isPowerDown = True
def powerUp(self):
"""power up the Thread device"""
@@ -1120,6 +1148,7 @@ class OpenThread(IThci):
print '%s call reboot' % self.port
try:
self._sendline('reset')
self.isPowerDown = True
time.sleep(3)
self.__startOpenThread()
@@ -1214,6 +1243,14 @@ class OpenThread(IThci):
try:
self._sendline('factoryreset')
self._read()
if self.isWhiteListEnabled:
self.isWhiteListEnabled = False
self.WhiteList.clear()
if self.isBlackListEnabled:
self.isBlackListEnabled = False
self.BlackList.clear()
except Exception, e:
ModuleHelper.WriteIntoDebugLogger("reset() Error: " + str(e))
@@ -1261,7 +1298,9 @@ class OpenThread(IThci):
self.setActiveTimestamp(self.activetimestamp)
self.isWhiteListEnabled = False
self._whiteList.clear()
self.isBlackListEnabled = False
self._blackList.clear()
self.isActiveCommissioner = False
except Exception, e:
ModuleHelper.WriteIntoDebugLogger("setDefaultValue() Error: " + str(e))
@@ -1373,6 +1412,7 @@ class OpenThread(IThci):
print timeout
try:
self._sendline('reset')
self.isPowerDown = True
time.sleep(timeout)
if self.deviceRole == Thread_Device_Role.SED: