mirror of
https://github.com/espressif/openthread.git
synced 2026-08-26 12:11:17 +00:00
THCI: recover whitelist and blacklist before reattach after reset (#1861)
* THCI: recover whitelist and blacklist before reattach after reset
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user