syntax = "proto3";

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

package voltha;

import "meta.proto";
import "google/api/annotations.proto";
import "openflow_13.proto";

message LogicalPortId {
    // unique id of logical device
    string id = 1;

    // id of the port on the logical device
    string port_id = 2;
}

message LogicalPort {
    string id = 1;
    openflow_13.ofp_port ofp_port = 2;
    string device_id = 3;
    uint32 device_port_no = 4;
    bool root_port = 5;
}

message LogicalPorts {
    repeated LogicalPort items = 1;
}

message LogicalDevice {

    // unique id of logical device
    string id = 1;

    // unique datapath id for the logical device (used by the SDN controller)
    uint64 datapath_id = 2;

    // device description
    openflow_13.ofp_desc desc = 3;

    // device features
    openflow_13.ofp_switch_features switch_features = 4;

    // name of the root device anchoring logical device
    string root_device_id = 5;

    // logical device ports
    repeated LogicalPort ports = 128 [(child_node) = {key: "id"}];

    // flows configured on the logical device
    openflow_13.Flows flows = 129 [(child_node) = {}];

    // flow groups configured on the logical device
    openflow_13.FlowGroups flow_groups = 130 [(child_node) = {}];

}

message LogicalDevices {
    repeated LogicalDevice items = 1;
}
