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

message PortStatistics {
    fixed32 intf_id = 1;
    fixed64 rx_bytes = 2;
    fixed64 rx_packets = 3;
    fixed64 rx_ucast_packets = 4;
    fixed64 rx_mcast_packets = 5;
    fixed64 rx_bcast_packets = 6;
    fixed64 rx_error_packets = 7;
    fixed64 rx_frames = 17;
    fixed64 rx_frames_64 = 18;
    fixed64 rx_frames_65_127 = 19;
    fixed64 rx_frames_128_255 = 20;
    fixed64 rx_frames_256_511 = 21;
    fixed64 rx_frames_512_1023 = 22;
    fixed64 rx_frames_1024_1518 = 23;
    fixed64 rx_frames_1519_2047 = 24;
    fixed64 rx_frames_2048_4095 = 25;
    fixed64 rx_frames_4096_9216 = 26;
    fixed64 rx_frames_9217_16383 = 27;
    fixed64 rx_crc_errors = 14;
    fixed64 rxUndersizePackets = 39;
    fixed64 rxOversizePackets = 40;
    fixed64 rxGem = 43;
    fixed64 rxGemDropped = 44;
    fixed64 rxGemIdle = 45;
    fixed64 rxGemCorrected = 46;
    fixed64 rxGemIllegal = 47;
    fixed64 rxFragmentError = 48;
    fixed64 rxPacketsDropped = 49;
    fixed64 rxCpuOmciPacketsDropped = 50;
    fixed64 rxCpu = 51;
    fixed64 rxOmci = 52;
    fixed64 rxOmciPacketsCrcError = 53;
    fixed64 rxFcsErrorPackets = 62;

    fixed64 tx_bytes = 8;
    fixed64 tx_packets = 9;
    fixed64 tx_ucast_packets = 10;
    fixed64 tx_mcast_packets = 11;
    fixed64 tx_bcast_packets = 12;
    fixed64 tx_error_packets = 13;
    fixed64 tx_frames = 28;
    fixed64 tx_frames_64 = 29;
    fixed64 tx_frames_65_127 = 30;
    fixed64 tx_frames_128_255 = 31;
    fixed64 tx_frames_256_511 = 32;
    fixed64 tx_frames_512_1023 = 33;
    fixed64 tx_frames_1024_1518 = 34;
    fixed64 tx_frames_1519_2047 = 35;
    fixed64 tx_frames_2048_4095 = 36;
    fixed64 tx_frames_4096_9216 = 37;
    fixed64 tx_frames_9217_16383 = 38;
    fixed64 txUndersizePackets = 41;
    fixed64 txOversizePackets = 42;
    fixed64 txGem = 54;
    fixed64 txCpu = 55;
    fixed64 txOmci = 56;
    fixed64 txDroppedIllegalLength = 57;
    fixed64 txDroppedTpidMiss = 58;
    fixed64 txDroppedVidMiss = 59;
    fixed64 txDroppedTotal = 60;

    fixed64 bip_errors = 15;
    fixed64 bip_units = 61;
    fixed32 timestamp = 16;
}