我使用的是zstack home 1.2.2a協議,網路裡有1個協調器.數個路由器和終端節點,其中一個終端節點 d 入網時紀錄了父節點路由器 r 的ieee位址,透過AddrMgrNwkAddrLookup 可取得父節點路由器 r 的ShortAdderss(舉例0x4058),但是測試一段時間後,從 sniffer 觀察父節點路由器 r 的 ShortAdderss 以變成0x3AB4,此時從終端節點 d 透過AddrMgrNwkAddrLookup查詢父節點路由器 r 還是返回0x4058,為何會如此?
YiKai Chen:
可以用NLME_GetCoordShortAddr取得父節點short address
Benson Chen1:
回复 YiKai Chen:
謝謝,使用NLME_GetCoordShortAddr 後可以正確取得父節點路由器 r ShortAdderss :0x3AB4,但是為何使用 AddrMgrNwkAddrLookup 查詢卻不同?
Alvin Chen:
回复 Benson Chen1:
/******************************************************************************* @fnAddrMgrNwkAddrLookup** @briefLookup NWK address using the EXT address.** @paramextAddr – [in] EXT address*nwkAddr – [out] NWK address** @returnuint8_t – success(TRUE:FALSE)*/
extern uint8_t AddrMgrNwkAddrLookup( uint8_t* extAddr, uint16_t* nwkAddr );
这是通过extaddr 获取nwkaddr ,并不是查询父节点api
Benson Chen1:
回复 Alvin Chen:
好的,但我意思是我透過 AddrMgrNwkAddrLookup 查詢路由器 r 返回的 ShortAddress 和 sniffer 看到的路由器 r 的ShortAdderss會不同?
YiKai Chen:
回复 Benson Chen1:
AddrMgrNwkAddrLookup不是用來查詢父節點的,你為什麼會用他來查詢父節點?
Benson Chen1:
回复 YiKai Chen:
抱歉,我更新一下我的敘述,應該是說我終端節點透過路由器 r 入網時取得了 路由器 r 的 ieee,然後使用 AddrMgrNwkAddrLookup 查詢該shortAddress返回 0x4058,但是放一段時間後, 從sniffer 看路由器 r 的shortAddress 以變成0x3AB4, 此時再從終端節點使用 AddrMgrNwkAddrLookup (路由器 r 的ieee) 還是返回 0x4058
YiKai Chen:
回复 Benson Chen1:
路由器 r 的shortAddress 以變成0x3AB4–>這個很奇怪吧?你路由有沒有使能NV_RESTORE?
Benson Chen1:
回复 YiKai Chen:
有使能NV_RESTORE,只是ShortAddress發生變化時 sniffer 當時沒紀錄到,是後來終端節點傳輸資料時發生問題才發現這狀況,所以上來發問是否會有 AddrMgrNwkAddrLookup 查詢到的shortAddress會和 sniffer 上看到的不同狀況?
YiKai Chen:
回复 Benson Chen1:
只根據你這樣的描述我沒辦法判定,建議你持續抓包,要是有發現同樣的問題,請附上抓包檔分析