/******************************************************************************************************** * @fn ZMacSecuritySetReq * * @brief Write a MAC Security PIB attribute. * * @param attr - PIB attribute to Set * @param value - pointer to the data * * @return status ********************************************************************************************************/ uint8 ZMacSecuritySetReq( uint8 attr, byte *value ) { return (ZMacStatus_t) MAC_MlmeSetSecurityReq( attr, value ); }
/******************************************************************************************************** * @fn ZMacSecuritySetReq * * @brief Write a MAC Security PIB attribute. * * @param attr - PIB attribute to Set * @param value - pointer to the data * * @return status ********************************************************************************************************/ uint8 ZMacSecuritySetReq( uint8 attr, byte *value ) { uint8 keyIndex, entry; uint32 frameCounter; uint8 *ptr; uint8 tmp[MAX_SECURITY_PIB_SET_ENTRY]; /* This must cover the largest single PIB entry */ uint8 temp[MAX_SECURITY_PIB_SET_ENTRY]; /* This must cover the largest single PIB entry */ /* Note that the Transform byte array to propriety PIB struct below works * because the members of the structures are all defined manually in a way, * where memcpy would work, without usage of explicit 'pack', they fit * such that memcpy would work */ ptr = (uint8 *) value; switch (attr) { case ZMacKeyIdLookupEntry: keyIndex = *ptr++; /* key_index */ entry = *ptr++; /* key_id_lookup_index */ /* Transform byte array to propriety PIB struct */ osal_memcpy(tmp, ptr, sizeof(keyIdLookupDescriptor_t)); osal_memcpy(&((macSecurityPibKeyIdLookupEntry_t *)temp)->macKeyIdLookupEntry, tmp, sizeof(keyIdLookupDescriptor_t)); ((macSecurityPibKeyIdLookupEntry_t *)temp)->key_id_lookup_index = entry; ((macSecurityPibKeyIdLookupEntry_t *)temp)->key_index = keyIndex; return (ZMacStatus_t) MAC_MlmeSetSecurityReq( attr, temp ); break; case ZMacKeyDeviceEntry: keyIndex = *ptr++; /* key_index */ entry = *ptr++; /* key_device_index */ /* Transform byte array to propriety PIB struct */ osal_memcpy(tmp, ptr, sizeof(keyDeviceDescriptor_t)); osal_memcpy(&((macSecurityPibKeyDeviceEntry_t *)temp)->macKeyDeviceEntry, tmp, sizeof(keyDeviceDescriptor_t)); ((macSecurityPibKeyDeviceEntry_t *)temp)->key_device_index = entry; ((macSecurityPibKeyDeviceEntry_t *)temp)->key_index = keyIndex; return (ZMacStatus_t) MAC_MlmeSetSecurityReq( attr, temp ); break; case ZMacKeyUsageEntry: keyIndex = *ptr++; /* key_index */ entry = *ptr++; /* key_key_usage_index */ /* Transform byte array to propriety PIB struct */ osal_memcpy(tmp, ptr, sizeof(keyUsageDescriptor_t)); osal_memcpy(&((macSecurityPibKeyUsageEntry_t *)temp)->macKeyUsageEntry, tmp, sizeof(keyUsageDescriptor_t)); ((macSecurityPibKeyUsageEntry_t *)temp)->key_key_usage_index = entry; ((macSecurityPibKeyUsageEntry_t *)temp)->key_index = keyIndex; return (ZMacStatus_t) MAC_MlmeSetSecurityReq( attr, temp ); break; case ZMacKeyEntry: keyIndex = *ptr++; /* key_index */ /* Transform byte array to propriety PIB struct */ osal_memcpy(tmp, ptr, MAC_KEY_MAX_LEN); osal_memcpy(&((macSecurityPibKeyEntry_t *)temp)->keyEntry, tmp, MAC_KEY_MAX_LEN); ptr+=MAC_KEY_MAX_LEN; osal_memcpy(&frameCounter, ptr, sizeof(frameCounter)); ((macSecurityPibKeyEntry_t *)temp)->frameCounter = frameCounter; ((macSecurityPibKeyEntry_t *)temp)->key_index = keyIndex; return (ZMacStatus_t) MAC_MlmeSetSecurityReq( attr, temp ); break; case ZMacDeviceEntry: entry = *ptr++; /* Transform byte array to propriety PIB struct */ osal_memcpy(tmp, ptr, sizeof(deviceDescriptor_t)); osal_memcpy(&((macSecurityPibDeviceEntry_t *)temp)->macDeviceEntry, tmp, sizeof(deviceDescriptor_t)); ((macSecurityPibDeviceEntry_t *)temp)->device_index = entry; return (ZMacStatus_t) MAC_MlmeSetSecurityReq( attr, temp ); break; case ZMacSecurityLevelEntry: entry = *ptr++; /* security_level_index */ /* Transform byte array to propriety PIB struct */ osal_memcpy(tmp, ptr, sizeof(securityLevelDescriptor_t)); osal_memcpy(&((macSecurityPibSecurityLevelEntry_t *)temp)->macSecurityLevelEntry, tmp, sizeof(securityLevelDescriptor_t)); ((macSecurityPibSecurityLevelEntry_t *)temp)->security_level_index = entry; return (ZMacStatus_t) MAC_MlmeSetSecurityReq( attr, temp ); break; } return (ZMacStatus_t) MAC_MlmeSetSecurityReq( attr, value ); }