syntax = "proto3";

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

package voltha;

import "yang_options.proto";

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

message LogLevel {
    option (yang_child_rule) = MOVE_TO_PARENT_LEVEL;

    // Logging verbosity level
    enum LogLevel {
        DEBUG = 0;
        INFO = 1;
        WARNING = 2;
        ERROR = 3;
        CRITICAL = 4;
    }
}

message AdminState {
    option (yang_child_rule) = MOVE_TO_PARENT_LEVEL;

    // Administrative State
    enum AdminState {

        // 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 = 3;

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

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

    }
}

message OperStatus {
    option (yang_child_rule) = MOVE_TO_PARENT_LEVEL;

    // Operational Status
    enum OperStatus {

        // 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;
    }
}

message ConnectStatus {
    option (yang_child_rule) = MOVE_TO_PARENT_LEVEL;

    // Connectivity Status
    enum ConnectStatus {

        // 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 {
    option (yang_child_rule) = MOVE_TO_PARENT_LEVEL;

    enum OperationReturnCode {
        OPERATION_SUCCESS = 0;
        OPERATION_FAILURE = 1;
        OPERATION_UNSUPPORTED = 2;
    }
    // Return code
    OperationReturnCode code = 1;

    // Additional Info
    string additional_info = 2;
}


