syntax = "proto3";

option go_package = "github.com/opencord/voltha-protos/v4/go/inter_container";
option java_package = "org.opencord.voltha";

import public "voltha_protos/common.proto";
import public "voltha_protos/voltha.proto";
import "google/protobuf/any.proto";
import "voltha_protos/openflow_13.proto";
import public "voltha_protos/logical_device.proto";
import "google/protobuf/timestamp.proto";

package voltha;

message StrType {
    string val = 1;
}

message IntType {
    int64 val = 1;
}

message BoolType {
    bool val = 1;
}

message Packet {
    bytes payload = 1;
}

message ErrorCode {
    enum codes {
        UNSUPPORTED_REQUEST = 0;
        INVALID_PARAMETERS = 1;
        DEADLINE_EXCEEDED = 2;
    }
}

message Error {
    ErrorCode.codes code = 1;
    string reason = 2;
}

enum MessageType {
    REQUEST = 0;
    RESPONSE = 1;
    DEVICE_DISCOVERED=2;
}

message Header {
    string id = 1;
    MessageType type = 2;
    string from_topic = 3;
    string to_topic = 4;
    string key_topic = 5;
    google.protobuf.Timestamp timestamp = 6;
}

message Argument {
    string key = 1;
    google.protobuf.Any value = 2;
}

message InterContainerMessage {
    Header header = 1;
    google.protobuf.Any body = 2;
}

message InterContainerRequestBody {
    string rpc = 2;
    repeated Argument args = 3;
    bool response_required = 4;
    string reply_to_topic = 5;
}

message InterContainerResponseBody {
    bool success = 1;
    google.protobuf.Any result = 3;
}

message SwitchCapability {
    openflow_13.ofp_desc desc = 1;
    openflow_13.ofp_switch_features switch_features = 2;
}

message DeviceDiscovered {
    string id = 1;
    string parent_id = 2;
    string device_type = 3;
    string publisher = 4;
}

message InterAdapterMessageType {
    enum Types {
        FLOW_REQUEST = 0;
        FLOW_RESPONSE = 1;
        OMCI_REQUEST = 2;
        OMCI_RESPONSE = 3;
        METRICS_REQUEST = 4;
        METRICS_RESPONSE = 5;
        ONU_IND_REQUEST = 6;
        ONU_IND_RESPONSE = 7;
        TECH_PROFILE_DOWNLOAD_REQUEST = 8;
        DELETE_GEM_PORT_REQUEST = 9;
        DELETE_TCONT_REQUEST = 10;
    }
}

message InterAdapterHeader {
    string id = 1;
    InterAdapterMessageType.Types type = 2;
    string from_topic = 3;
    string to_topic = 4;
    string to_device_id = 5;
    string proxy_device_id = 6;
    google.protobuf.Timestamp timestamp = 7;
}

message InterAdapterOmciMessage {
    bytes message = 1; // OMCI_REQUEST or OMCI_RESPONSE
    common.ConnectStatus.Types connect_status = 2;
    voltha.Device.ProxyAddress proxy_address = 3;
}

message InterAdapterTechProfileDownloadMessage {
    uint32 uni_id = 1;
    string path = 2;
}

message InterAdapterDeleteGemPortMessage {
    uint32 uni_id = 1;
    string tp_path = 2;
    uint32 gem_port_id = 3;
}

message InterAdapterDeleteTcontMessage {
    uint32 uni_id = 1;
    string tp_path = 2;
    uint32 alloc_id = 3;
}

message InterAdapterResponseBody {
    bool status = 1;
    oneof payload {
        google.protobuf.Any body = 2;
        InterAdapterOmciMessage omci = 3; // OMCI_REQUEST or OMCI_RESPONSE
    }
}

message InterAdapterMessage {
    InterAdapterHeader header = 1;
    google.protobuf.Any body = 2;
}
