This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Device Announce不都是广播的吗?

Genius 3030 points
void ZDO_ProcessDeviceAnnce( zdoIncomingMsg_t *inMsg )中的一段代码:
if ( ZSTACK_ROUTER_BUILD )
  {
    // If the device annce comes from a end device child that has moved
    // to another parent, remove it from associated device list

    // If the dev annce is coming from other device's children,
    // (The dev annce from its own children shall be unicast to itself,
    // So check the mac destination address)
    // Remove it from the associated device list. If it is not
    // a child, no action will be taken in AssocRemove() anyway.
    if ( inMsg->macDestAddr != NLME_GetShortAddr() )
    {
      associated_devices_t *dev_ptr;

      // If it's an end device child
      dev_ptr = AssocGetWithExt( Annce.extAddr );
      if ( dev_ptr )
      {
        if ( dev_ptr->nodeRelation == CHILD_RFD ||
             dev_ptr->nodeRelation == CHILD_RFD_RX_IDLE )
        {
          AssocRemove( Annce.extAddr );
        }
      }

      // Remove the address from the SrcMatch table,
      // just in case the device was aged out by Child Management Table process
      if ( ( pNwkNotMyChildListDelete != NULL ) &&
           ( zgChildAgingEnable == TRUE ) )
      {
        pNwkNotMyChildListDelete( Annce.nwkAddr );
      }
    }
  }

代码中的注释:

// (The dev annce from its own children shall be unicast to itself,
// So check the mac destination address)

可以单播?

抓包发现Device Announce都是广播的,那么AssocRemove( Annce.extAddr );将会执行,即删除关联表。