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;
    // Deprecated: OLT being a Layer 2 device, use rx_frames (field 17) instead
    fixed64 rx_packets = 3 [deprecated = true];
    // Deprecated: OLT being a Layer 2 device, use rx_ucast_frames (field 63) instead
    fixed64 rx_ucast_packets = 4 [deprecated = true];
    // Deprecated: OLT being a Layer 2 device, use rx_mcast_frames (field 64) instead
    fixed64 rx_mcast_packets = 5 [deprecated = true];
    // Deprecated: OLT being a Layer 2 device, use rx_bcast_frames (field 65) instead
    fixed64 rx_bcast_packets = 6 [deprecated = true];
    // Deprecated: OLT being a Layer 2 device, use rx_error_frames (field 66) instead
    fixed64 rx_error_packets = 7 [deprecated = true];
    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;
    // Deprecated: OLT being a Layer 2 device, use tx_frames (field 28) instead
    fixed64 tx_packets = 9 [deprecated = true];
    // Deprecated: OLT being a Layer 2 device, use tx_ucast_frames (field 68) instead
    fixed64 tx_ucast_packets = 10 [deprecated = true];
    // Deprecated: OLT being a Layer 2 device, use tx_mcast_frames (field 69) instead
    fixed64 tx_mcast_packets = 11 [deprecated = true];
    // Deprecated: OLT being a Layer 2 device, use tx_bcast_frames (field 70) instead
    fixed64 tx_bcast_packets = 12 [deprecated = true];
    // Deprecated: OLT being a Layer 2 device, use tx_error_frames (field 71) instead
    fixed64 tx_error_packets = 13 [deprecated = true];
    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;

    fixed64 rx_ucast_frames = 63;
    fixed64 rx_mcast_frames = 64;
    fixed64 rx_bcast_frames = 65;
    fixed64 rx_error_frames = 66;
    fixed64 rx_right_frames = 67;
    fixed64 tx_ucast_frames = 68;
    fixed64 tx_mcast_frames = 69;
    fixed64 tx_bcast_frames = 70;
    fixed64 tx_error_frames = 71;
    fixed64 rx_discarded_frames = 72;

}
