syntax = "proto3";

option go_package = "github.com/opencord/voltha-protos/v5/go/common";

package common;

option java_package = "org.opencord.voltha";

// Full path for KV store
message Key {
    string key = 1;
}

// Convey a resource identifier
message ID {
    string id = 1;
}

// Represents a list of IDs
message IDs {
    repeated ID items = 1;
}

enum TestModeKeys {
    api_test=0;
}

message Connection {
    // endpoint is the endpoint sending the request
    string endpoint = 1;

    // contextInfo represents additional contextual information
    string contextInfo = 2;

    // keep_alive_interval is used to indicate to the remote endpoint how often it 
    // will get a keep alive notification
    int64 keep_alive_interval = 3;
}

message AdminState {
    // Administrative State
    enum Types {

        // The administrative state of the device is unknown
        UNKNOWN = 0;

        // The device is pre-provisioned into Voltha, but not contacted by it
        PREPROVISIONED = 1;

        // The device is enabled for activation and operation
        ENABLED = 2;

        // The device is disabled and shall not perform its intended forwarding
        // functions other than being available for re-activation.
        DISABLED = 3;

        // The device is in the state of image download
        DOWNLOADING_IMAGE = 4;
    }
}

message OperStatus {
    // Operational Status
    enum Types {

        // The status of the device is unknown at this point
        UNKNOWN = 0;

        // The device has been discovered, but not yet activated
        DISCOVERED = 1;

        // The device is being activated (booted, rebooted, upgraded, etc.)
        ACTIVATING = 2;

        // Service impacting tests are being conducted
        TESTING = 3;

        // The device is up and active
        ACTIVE = 4;

        // The device has failed and cannot fulfill its intended role
        FAILED = 5;

        // The device is reconciling
        RECONCILING = 6;

        // The device is in reconciling failed
        RECONCILING_FAILED = 7;

        // The device has rebooted
        REBOOTED = 8;
    }
}

message ConnectStatus {
    // Connectivity Status
    enum Types {

        // The device connectivity status is unknown
        UNKNOWN = 0;

        // The device cannot be reached by Voltha
        UNREACHABLE = 1;

        // There is live communication between device and Voltha
        REACHABLE = 2;
    }
}

message OperationResp {
    enum OperationReturnCode {
        OPERATION_SUCCESS = 0;
        OPERATION_FAILURE = 1;
        OPERATION_UNSUPPORTED = 2;
        OPERATION_IN_PROGRESS = 3;
    }
    // Return code
    OperationReturnCode code = 1;

    // Additional Info
    string additional_info = 2;
}

