syntax = "proto3";

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

import "voltha_protos/common.proto";
import "voltha_protos/voltha.proto";
import "voltha_protos/openflow_13.proto";
import "voltha_protos/adapter.proto";
import "voltha_protos/device.proto";
import "voltha_protos/extensions.proto";
import "voltha_protos/omci_test.proto";

package core_adapter;

// Core-Adapter messages

message AdapterRegistration {
    adapter.Adapter adapter  = 1;
    device.DeviceTypes dTypes = 2;
}

message ChildDeviceFilter {
    string parent_id = 1;
    string serial_number = 2;
    optional uint32 onu_id = 3;
    uint32 parent_port_no = 4;
}

message PortFilter {
    string device_id = 1;
    uint32 port = 2;
    device.Port.PortType port_type = 3;
}

message DeviceDiscovery {
    string parent_id = 1;
    uint32 parent_port_no = 2;
    string child_device_type = 3;
    uint32 channel_id = 4;
    string vendor_id = 5;
    string serial_number = 6;
    uint32 onu_id = 7;
}

message DeviceStateFilter {
    string device_id = 1;
    string parent_device_id = 2;
    common.OperStatus.Types oper_status = 3;
    common.ConnectStatus.Types conn_status = 4;
}

message PortState {
    string device_id = 1;
    device.Port.PortType port_type = 2;
    uint32 port_no = 3;
    common.OperStatus.Types oper_status = 4;
}

message PortStateFilter {
    string device_id = 1;
    uint32 port_type_filter = 2;
    common.OperStatus.Types oper_status = 4;
}

message PacketIn {
    string device_id = 1;
    uint32 port = 2;
    bytes packet = 3;
}

message PacketOut {
    string device_id = 1;
    uint32 egress_port_no = 2;
    openflow_13.ofp_packet_out packet = 3;
}

message DeviceReason {
    string device_id = 1;
    string reason = 2;
}

message BulkFlows {
    device.Device device = 1;
    openflow_13.Flows flows = 2;
    openflow_13.FlowGroups groups = 3;
    openflow_13.FlowMetadata flow_metadata = 4;
}

message IncrementalFlows {
    device.Device device = 1;
    openflow_13.FlowChanges flows = 2;
    openflow_13.FlowGroupChanges groups = 3;
    openflow_13.FlowMetadata flow_metadata = 4;
}

message PmConfigsInfo {
    string device_id = 1;
    device.PmConfigs pm_configs = 2;
}

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

message ImageDownloadMessage {
    device.Device device = 1;
    device.ImageDownload image = 2;
}

message OMCITest {
    device.Device device = 1;
    omci.OmciTestRequest request = 2;
}

message SimulateAlarmMessage {
    device.Device device = 1;
    device.SimulateAlarmRequest request = 2;
}

message GetExtValueMessage {
    device.Device parent_device = 1;
    device.Device child_device = 2;
    extension.ValueType.Type value_type=3;
}

message SetExtValueMessage {
    device.Device device = 1;
    extension.ValueSet value=3;
}
