Commit fd024e39 authored by Greg Williams's avatar Greg Williams
Browse files

Renamed InstantSecureErase to SecureErase for consistency.

Added InstantErase/ERASE operation, and completed validation of erase by ensuring written objects are gone.
parent dc66ecbd
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -116,24 +116,31 @@ KineticStatus KineticAdminClient_GetLog(KineticSession const * const session,
// def setSecurity(self, *args, **kwargs):

/**
 * @brief Executes an InstantSecureErase command to erase all data from the Kinetic device.
 * @brief Executes a SecureErase command to erase all data from the Kinetic device.
 *
 * @param session       The connected KineticSession to use for the operation.
 *
 * @return              Returns the resulting KineticStatus.
 */
KineticStatus KineticAdminClient_InstantSecureErase(KineticSession const * const session);
KineticStatus KineticAdminClient_SecureErase(KineticSession const * const session);

/**
 * @brief Executes an InstantErase command to erase all data from the Kinetic device.
 *
 * @param session       The connected KineticSession to use for the operation.
 *
 * @return              Returns the resulting KineticStatus.
 */
KineticStatus KineticAdminClient_InstantErase(KineticSession const * const session);

/**
 * @brief Updates the cluster version.
 *
 * @param clusterVersion      Current cluster version.
 * @param newClusterVersion   New cluster version.
 *
 * @return              Returns the resulting KineticStatus.
 */
KineticStatus KineticAdminClient_SetClusterVersion(KineticSession const * const session,
                                              int64_t clusterVersion,
    int64_t newClusterVersion);

#endif // _KINETIC_ADMIN_CLIENT_H
+27 −14
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ KineticStatus KineticAdminClient_GetLog(KineticSession const * const session,
    return KineticController_ExecuteOperation(operation, closure);
}

KineticStatus KineticAdminClient_InstantSecureErase(KineticSession const * const session)
KineticStatus KineticAdminClient_SecureErase(KineticSession const * const session)
{
    assert(session != NULL);
    assert(session->connection != NULL);
@@ -78,28 +78,41 @@ KineticStatus KineticAdminClient_InstantSecureErase(KineticSession const * const
    KineticOperation* operation = KineticOperation_Create(session);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}

    KineticOperation_BuildInstantSecureErase(operation);
    KineticOperation_BuildSecureErase(operation);
    return KineticController_ExecuteOperation(operation, NULL);
}

KineticStatus KineticClient_SetClusterVersion(KineticSession handle,
                                              int64_t clusterVersion,
                                              int64_t newClusterVersion)
KineticStatus KineticAdminClient_InstantErase(KineticSession const * const session)
{
    assert(session != NULL);
    assert(session->connection != NULL);

// KINETIC_PROTO_MESSAGE_AUTH_TYPE_PINAUTH
    (void)handle;
    (void)clusterVersion;
    (void)newClusterVersion;
    KineticStatus status;
    status = KineticAuth_EnsurePinSupplied(&session->config);
    if (status != KINETIC_STATUS_SUCCESS) {return status;}
    status = KineticAuth_EnsureSslEnabled(&session->config);
    if (status != KINETIC_STATUS_SUCCESS) {return status;}

#if 0
    assert(handle != KINETIC_HANDLE_INVALID);
    KineticOperation* operation = KineticOperation_Create(session);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}

    KineticOperation* operation = KineticController_CreateOperation(handle);
    KineticOperation_BuildInstantErase(operation);
    return KineticController_ExecuteOperation(operation, NULL);
}

KineticStatus KineticAdminClient_SetClusterVersion(KineticSession const * const session,
                                              int64_t newClusterVersion)
{
    assert(session != NULL);
    assert(session->connection != NULL);

    KineticStatus status;
    status = KineticAuth_EnsureSslEnabled(&session->config);
    if (status != KINETIC_STATUS_SUCCESS) {return status;}

    KineticOperation* operation = KineticOperation_Create(session);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}

    KineticOperation_BuildSetClusterVersion(operation, newClusterVersion);
    return KineticController_ExecuteOperation(operation, NULL);
#endif
    return KINETIC_STATUS_INVALID;
}
+2 −1
Original line number Diff line number Diff line
@@ -34,7 +34,8 @@ KineticClient * KineticClient_Init(const char* log_file, int log_level)
    KineticLogger_Init(log_file, log_level);
    KineticClient * client = KineticCalloc(1, sizeof(*client));
    if (client == NULL) { return NULL; }
    bool success = KineticPDU_InitBus(log_level, client);
    int bus_log_level = (log_level > 0) ? (log_level-1) : 0;
    bool success = KineticPDU_InitBus(bus_log_level, client);
    if (!success)
    {
        KineticFree(client);
+39 −8
Original line number Diff line number Diff line
@@ -681,19 +681,20 @@ KineticStatus KineticOperation_BuildP2POperation(KineticOperation* const operati
    return KINETIC_STATUS_SUCCESS;
}

KineticStatus KineticOperation_InstantSecureEraseCallback(KineticOperation* const operation, KineticStatus const status)
KineticStatus KineticOperation_SecureEraseCallback(KineticOperation* const operation, KineticStatus const status)
{
    assert(operation != NULL);
    assert(operation->connection != NULL);
    LOGF3("IntantSecureErase callback w/ operation (0x%0llX) on connection (0x%0llX)",
    LOGF3("SecureErase callback w/ operation (0x%0llX) on connection (0x%0llX)",
        operation, operation->connection);
    return status;
}

void KineticOperation_BuildInstantSecureErase(KineticOperation* operation)
void KineticOperation_BuildSecureErase(KineticOperation* operation)
{
    KineticOperation_ValidateOperation(operation);
    KineticSession_IncrementSequence(operation->connection->session);

    operation->request->message.command.header->messageType = KINETIC_PROTO_COMMAND_MESSAGE_TYPE_PINOP;
    operation->request->message.command.header->has_messageType = true;
    operation->request->command->body = &operation->request->message.body;
@@ -704,13 +705,41 @@ void KineticOperation_BuildInstantSecureErase(KineticOperation* operation)
    
    operation->valueEnabled = false;
    operation->sendValue = false;
    operation->callback = &KineticOperation_InstantSecureEraseCallback;
    operation->callback = &KineticOperation_SecureEraseCallback;
    operation->request->pinOp = true;
    operation->timeoutSeconds = 180;
}

KineticStatus KineticOperation_InstantEraseCallback(KineticOperation* const operation, KineticStatus const status)
{
    assert(operation != NULL);
    assert(operation->connection != NULL);
    LOGF3("InstantErase callback w/ operation (0x%0llX) on connection (0x%0llX)",
        operation, operation->connection);
    return status;
}

void KineticOperation_BuildInstantErase(KineticOperation* operation)
{
    KineticOperation_ValidateOperation(operation);
    KineticSession_IncrementSequence(operation->connection->session);

    operation->request->message.command.header->messageType = KINETIC_PROTO_COMMAND_MESSAGE_TYPE_PINOP;
    operation->request->message.command.header->has_messageType = true;
    operation->request->command->body = &operation->request->message.body;
    operation->request->command->body->pinOp = &operation->request->message.pinOp;
    
    operation->request->command->body->pinOp->pinOpType = KINETIC_PROTO_COMMAND_PIN_OPERATION_PIN_OP_TYPE_ERASE_PINOP;
    operation->request->command->body->pinOp->has_pinOpType = true;
    
    operation->valueEnabled = false;
    operation->sendValue = false;
    operation->callback = &KineticOperation_InstantEraseCallback;
    operation->request->pinOp = true;
    operation->timeoutSeconds = 180;
}

KineticStatus KineticOperation_SetClusterVersionCallback(KineticOperation* operation,
    KineticStatus const status)
KineticStatus KineticOperation_SetClusterVersionCallback(KineticOperation* const operation, KineticStatus const status)
{
    assert(operation != NULL);
    assert(operation->connection != NULL);
@@ -723,10 +752,12 @@ KineticStatus KineticOperation_SetClusterVersionCallback(KineticOperation* opera
void KineticOperation_BuildSetClusterVersion(KineticOperation* operation, int64_t newClusterVersion)
{
    KineticOperation_ValidateOperation(operation);
    KineticSession_IncrementSequence((KineticSession const * const)&operation->connection->session);
    KineticSession_IncrementSequence(operation->connection->session);
    operation->request->message.command.header->messageType = KINETIC_PROTO_COMMAND_MESSAGE_TYPE_SETUP;
    operation->request->message.command.header->has_messageType = true;
    operation->request->command->body = &operation->request->message.body;
    
    operation->request->command->body->setup = &operation->request->message.setup;
    operation->request->command->body->setup->newClusterVersion = newClusterVersion;
    operation->request->command->body->setup->has_newClusterVersion = true;

@@ -735,7 +766,7 @@ void KineticOperation_BuildSetClusterVersion(KineticOperation* operation, int64_
    operation->valueEnabled = false;
    operation->sendValue = false;
    operation->callback = &KineticOperation_SetClusterVersionCallback;
    operation->request->pinOp = true;
    operation->request->pinOp = false;
}

static void KineticOperation_ValidateOperation(KineticOperation* operation)
+6 −2
Original line number Diff line number Diff line
@@ -69,9 +69,13 @@ KineticStatus KineticOperation_P2POperationCallback(KineticOperation* const oper
KineticStatus KineticOperation_BuildP2POperation(KineticOperation* const operation,
                                                 KineticP2P_Operation* const p2pOp);

KineticStatus KineticOperation_InstantSecureEraseCallback(KineticOperation* const operation, KineticStatus const status);
void KineticOperation_BuildInstantSecureErase(KineticOperation* operation);
KineticStatus KineticOperation_SecureEraseCallback(KineticOperation* const operation, KineticStatus const status);
void KineticOperation_BuildSecureErase(KineticOperation* operation);

KineticStatus KineticOperation_InstantEraseCallback(KineticOperation* const operation, KineticStatus const status);
void KineticOperation_BuildInstantErase(KineticOperation* operation);

KineticStatus KineticOperation_SetClusterVersionCallback(KineticOperation* const operation, KineticStatus const status);
void KineticOperation_BuildSetClusterVersion(KineticOperation* operation, int64_t newClusterVersion);

void KineticOperation_Complete(KineticOperation* operation, KineticStatus status);
Loading