syntax = "proto3";

import "google/protobuf/any.proto";
import "openflow_13.proto";
import public "logical_device.proto";


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

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

message Error {
    ErrorCode 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;
    int64 timestamp = 5;
}

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

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 InterAdapterResponseBody {
    bool status = 1;
    google.protobuf.Any body = 2;
}

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