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";
import "voltha_protos/tech_profile.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 InterAdapterTechProfileInstanceRequestMessage {
    string tp_instance_path = 1; // technology profile instance path
    string parent_device_id = 2;
    uint32 parent_pon_port = 3;
    uint32 onu_id = 4;
    uint32 uni_id = 5;
}

message InterAdapterTechProfileDownloadMessage {
    uint32 uni_id = 1;
    string tp_instance_path = 2;
    oneof tech_tp_instance {
        tech_profile.TechProfileInstance tp_instance = 3; // relevant for GPON, XGPON and XGS-PON technologies
        tech_profile.EponTechProfileInstance epon_tp_instance = 4; // relevant for EPON technology
    }
}

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

message InterAdapterDeleteTcontMessage {
    uint32 uni_id = 1;
    string tp_instance_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;
}
