diff --git a/include/commissioning/commissioner.h b/include/commissioning/commissioner.h index 42f809819..68112191a 100644 --- a/include/commissioning/commissioner.h +++ b/include/commissioning/commissioner.h @@ -212,6 +212,16 @@ OTAPI ThreadError OTCALL otSendMgmtCommissionerGet(otInstance *, const uint8_t * OTAPI ThreadError OTCALL otSendMgmtCommissionerSet(otInstance *, const otCommissioningDataset *aDataset, const uint8_t *aTlvs, uint8_t aLength); +/** + * This function returns the origian Commissioner Session ID. + * + * @param[in] aInstance A pointer to an OpenThread instance. + * + * @returns The current commissioner session id. + * + */ +OTAPI uint16_t OTCALL otCommissionerGetSessionId(otInstance *); + /** * @} * diff --git a/src/cli/README.md b/src/cli/README.md index be9c26181..085dc4caa 100644 --- a/src/cli/README.md +++ b/src/cli/README.md @@ -307,6 +307,16 @@ Done Conflict: dead, 00000800 ``` +### commissioner sessionid + +Get current commissioner session id. + +```bash +> commissioner sessionid +0 +Done +``` + ### contextreusedelay Get the CONTEXT_ID_REUSE_DELAY value. diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index 860efc091..efbba8ec3 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -2375,6 +2375,10 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[]) SuccessOrExit(error = otSendMgmtCommissionerSet(mInstance, &dataset, tlvs, static_cast(length))); } + else if (strcmp(argv[0], "sessionid") == 0) + { + sServer->OutputFormat("%d\r\n", otCommissionerGetSessionId(mInstance)); + } exit: AppendResult(error); diff --git a/src/core/openthread.cpp b/src/core/openthread.cpp index a3ec6d818..bfee71b61 100644 --- a/src/core/openthread.cpp +++ b/src/core/openthread.cpp @@ -1669,6 +1669,11 @@ ThreadError otSendMgmtCommissionerSet(otInstance *aInstance, const otCommissioni { return aInstance->mThreadNetif.GetCommissioner().SendMgmtCommissionerSetRequest(*aDataset, aTlvs, aLength); } + +uint16_t otCommissionerGetSessionId(otInstance *aInstance) +{ + return aInstance->mThreadNetif.GetCommissioner().GetSessionId(); +} #endif // OPENTHREAD_ENABLE_COMMISSIONER #if OPENTHREAD_ENABLE_JOINER diff --git a/tools/harness-thci/ARM.py b/tools/harness-thci/ARM.py index 1028712c5..5f6653275 100644 --- a/tools/harness-thci/ARM.py +++ b/tools/harness-thci/ARM.py @@ -56,6 +56,7 @@ class ARM(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 + isActiveCommissioner = False # indicate if Thread device is an active commissioner LOWEST_POSSIBLE_PARTATION_ID = 0x1 #def __init__(self, SerialPort=COMPortName, EUI=MAC_Address): @@ -652,6 +653,11 @@ class ARM(IThci): except Exception, e: ModuleHelper.WriteIntoDebugLogger("setKeySwitchGuardTime() Error; " + str(e)) + def __getCommissionerSessionId(self): + """ get the commissioner session id allocated from Leader """ + print '%s call getCommissionerSessionId' % self.port + return self.__sendCommand('commissioner sessionid')[0] + def _connect(self): print 'My port is %s' % self.port if self.port.startswith('COM'): @@ -1239,6 +1245,7 @@ class ARM(IThci): self.setNetworkKey(self.networkKey) self.isWhiteListEnabled = False self.isBlackListEnabled = False + self.isActiveCommissioner = False self.firmware = 'Nov 4 2016 07:24:59' except Exception, e: ModuleHelper.WriteIntoDebugLogger("setDefaultValue() Error: " + str(e)) @@ -1893,6 +1900,7 @@ class ARM(IThci): cmd = 'commissioner start' print cmd if self.__sendCommand(cmd)[0] == 'Done': + self.isActiveCommissioner = True time.sleep(20) # time for petition process return True return False @@ -1955,6 +1963,7 @@ class ARM(IThci): cmd = 'commissioner start' print cmd if self.__sendCommand(cmd)[0] == 'Done': + self.isActiveCommissioner = True time.sleep(40) # time for petition process and at least one keep alive return True else: @@ -2381,8 +2390,16 @@ class ARM(IThci): cmd = 'commissioner mgmtset' if xCommissionerSessionID != None: + # use assigned session id cmd += ' sessionid ' cmd += str(xCommissionerSessionID) + elif xCommissionerSessionID == None: + # use original session id + if self.isActiveCommissioner == True: + cmd += ' sessionid ' + cmd += self.__getCommissionerSessionId() + else: + pass if xSteeringData != None: cmd += ' steeringdata ' @@ -2392,6 +2409,10 @@ class ARM(IThci): cmd += ' locator ' cmd += str(xBorderRouterLocator) + if xChannelTlv != None: + cmd += ' binary ' + cmd += '000300' + hex(xChannelTlv).lstrip('0x').zfill(4) + print cmd return self.__sendCommand(cmd)[0] == 'Done'