//-----------------------------------------------------------------------------
int MIH_C_Link_Message_Decode_Link_Action_request(Bit_Buffer_t* bbP, MIH_C_Message_Link_Action_request_t *messageP) {
//-----------------------------------------------------------------------------
    int                status;
    MIH_C_TLV_TYPE_T   tlv;
    u_int16_t          length;

    MIH_C_TLV_TYPE_decode(bbP, &tlv);
    MIH_C_LIST_LENGTH_decode(bbP, &length);
    if (tlv == MIH_C_TLV_SOURCE_MIHF_ID) { MIH_C_MIHF_ID_decode(bbP, &messageP->source);} else {return MIH_PRIMITIVE_DECODE_FAILURE;}


    MIH_C_TLV_TYPE_decode(bbP, &tlv);
    MIH_C_LIST_LENGTH_decode(bbP, &length);
    if (tlv == MIH_C_TLV_DESTINATION_MIHF_ID) { MIH_C_MIHF_ID_decode(bbP, &messageP->destination);} else {return MIH_PRIMITIVE_DECODE_FAILURE;}

    status = MIH_C_Link_Primitive_Decode_Link_Action_request(bbP, &messageP->primitive);
    if (status == MIH_PRIMITIVE_DECODE_OK) {
        return MIH_MESSAGE_DECODE_OK;
    }
    if (status == MIH_PRIMITIVE_DECODE_TOO_SHORT) {
        return MIH_MESSAGE_DECODE_TOO_SHORT;
    }
    if (status == MIH_PRIMITIVE_DECODE_FAILURE) {
        return MIH_MESSAGE_DECODE_FAILURE;
    }
    if (status == MIH_PRIMITIVE_DECODE_BAD_PARAMETER) {
        return MIH_MESSAGE_DECODE_BAD_PARAMETER;
    }
    return status;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Message_Decode_Link_Capability_Discover_request(Bit_Buffer_t* bbP, MIH_C_Message_Link_Capability_Discover_request_t *messageP)
{
  //-----------------------------------------------------------------------------
  int                status;
  MIH_C_TLV_TYPE_T   tlv;
  u_int16_t          length;

  // SOURCE
  MIH_C_TLV_TYPE_decode(bbP, &tlv);
  MIH_C_LIST_LENGTH_decode(bbP, &length);

  if (tlv == MIH_C_TLV_SOURCE_MIHF_ID) {
    MIH_C_MIHF_ID_decode(bbP, &messageP->source);
  } else {
    printf("[MIH_C] ERROR  %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_SOURCE_MIHF_ID\n", __FUNCTION__);
    return MIH_MESSAGE_DECODE_FAILURE;
  }

  // DESTINATION
  MIH_C_TLV_TYPE_decode(bbP, &tlv);
  MIH_C_LIST_LENGTH_decode(bbP, &length);

  if (tlv == MIH_C_TLV_DESTINATION_MIHF_ID) {
    MIH_C_MIHF_ID_decode(bbP, &messageP->destination);
  } else {
    printf("[MIH_C] ERROR  %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_DESTINATION_MIHF_ID\n", __FUNCTION__);
    return MIH_MESSAGE_DECODE_FAILURE;
  }

  status = MIH_C_Link_Primitive_Decode_Link_Capability_Discover_request(bbP, &messageP->primitive);

  if (status == MIH_PRIMITIVE_DECODE_OK) {
    printf("[MIH_C] %s() -> MIH_MESSAGE_DECODE_OK \n", __FUNCTION__);
    return MIH_MESSAGE_DECODE_OK;
  }

  if (status == MIH_PRIMITIVE_DECODE_TOO_SHORT) {
    printf("[MIH_C] ERROR  %s() -> MIH_MESSAGE_DECODE_TOO_SHORT \n", __FUNCTION__);
    return MIH_MESSAGE_DECODE_TOO_SHORT;
  }

  if (status == MIH_PRIMITIVE_DECODE_FAILURE) {
    printf("[MIH_C] ERROR  %s() -> MIH_MESSAGE_DECODE_FAILURE \n", __FUNCTION__);
    return MIH_MESSAGE_DECODE_FAILURE;
  }

  if (status == MIH_PRIMITIVE_DECODE_BAD_PARAMETER) {
    printf("[MIH_C] ERROR  %s() -> MIH_MESSAGE_DECODE_BAD_PARAMETER \n", __FUNCTION__);
    return MIH_MESSAGE_DECODE_BAD_PARAMETER;
  }

  return status;
}