syntax = "proto3";

option go_package = "github.com/opencord/voltha-protos/v3/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";

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;
    int64 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 PortCapability {
    LogicalPort port = 1;
}

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