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

enum TestModeKeys {
    api_test=0;
}

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;
        FATAL = 5;
    }
}

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


