blob: b76d9031dc1f11c6dc17773ddea546a4c39e5dbd [file] [log] [blame]
/*
* Top-level Voltha API definition
*
* For details, see individual definition files.
*/
syntax = "proto3";
package voltha;
import "google/protobuf/empty.proto";
import "google/api/annotations.proto";
import public "meta.proto";
import public "common.proto";
import public "health.proto";
import public "logical_device.proto";
import public "device.proto";
import public "adapter.proto";
import public "openflow_13.proto";
option java_package = "org.opencord.voltha";
option java_outer_classname = "VolthaProtos";
option csharp_namespace = "Opencord.Voltha.Voltha";
message DeviceGroup {
string id = 1 [(access) = READ_ONLY];
repeated LogicalDevice logical_devices = 2 [(child_node) = {key: "id"}];
repeated Device devices = 3 [(child_node) = {key: "id"}];
}
message DeviceGroups {
repeated DeviceGroup items = 1;
}
// Top-level (root) node for a Voltha Instance
message VolthaInstance {
string instance_id = 1 [(access) = READ_ONLY];
string version = 2 [(access) = READ_ONLY];
LogLevel log_level = 3;
HealthStatus health = 10 [(child_node) = {}];
repeated Adapter adapters = 11 [(child_node) = {key: "id" }];
repeated LogicalDevice logical_devices = 12 [(child_node) = {key: "id"}];
repeated Device devices = 13 [(child_node) = {key: "id"}];
repeated DeviceType device_types = 14 [(child_node) = {key: "id"}];
repeated DeviceGroup device_groups = 15 [(child_node) = {key: "id"}];
}
message VolthaInstances {
repeated string items = 1;
}
// Voltha representing the entire Voltha cluster
message Voltha {
string version = 1 [(access) = READ_ONLY];
LogLevel log_level = 2;
repeated VolthaInstance instances = 3 [(child_node) = {key: "instance_id"}];
repeated Adapter adapters = 11 [(child_node) = {key: "id"}];
repeated LogicalDevice logical_devices = 12 [(child_node) = {key: "id"}];
repeated Device devices = 13 [(child_node) = {key: "id"}];
repeated DeviceGroup device_groups = 15 [(child_node) = {key: "id"}];
}
/*
* Cluster-wide Voltha APIs
*
* These APIs are potentially dispatched to the leader of the Voltha cluster,
* to a specific Voltha instance which owns the given device or logical device.
*
*/
service VolthaGlobalService {
// Get high level information on the Voltha cluster
rpc GetVoltha(google.protobuf.Empty) returns(Voltha) {
option (google.api.http) = {
get: "/api/v1"
};
}
// List all Voltha cluster instances
rpc ListVolthaInstances(google.protobuf.Empty) returns(VolthaInstances) {
option (google.api.http) = {
get: "/api/v1/instances"
};
}
// Get details on a Voltha cluster instance
rpc GetVolthaInstance(ID) returns(VolthaInstance) {
option (google.api.http) = {
get: "/api/v1/instances/{id}"
};
}
// List all logical devices managed by the Voltha cluster
rpc ListLogicalDevices(google.protobuf.Empty) returns(LogicalDevices) {
option (google.api.http) = {
get: "/api/v1/logical_devices"
};
}
// Get additional information on a given logical device
rpc GetLogicalDevice(ID) returns(LogicalDevice) {
option (google.api.http) = {
get: "/api/v1/logical_devices/{id}"
};
}
// List ports of a logical device
rpc ListLogicalDevicePorts(ID) returns(LogicalPorts) {
option (google.api.http) = {
get: "/api/v1/logical_devices/{id}/ports"
};
}
// List all flows of a logical device
rpc ListLogicalDeviceFlows(ID) returns(openflow_13.Flows) {
option (google.api.http) = {
get: "/api/v1/logical_devices/{id}/flows"
};
}
// Update flow table for logical device
rpc UpdateLogicalDeviceFlowTable(openflow_13.FlowTableUpdate)
returns(google.protobuf.Empty) {
option (google.api.http) = {
post: "/api/v1/logical_devices/{id}/flows"
body: "*"
};
}
// List all flow groups of a logical device
rpc ListLogicalDeviceFlowGroups(ID) returns(openflow_13.FlowGroups) {
option (google.api.http) = {
get: "/api/v1/logical_devices/{id}/flow_groups"
};
}
// Update group table for device
rpc UpdateLogicalDeviceFlowGroupTable(openflow_13.FlowGroupTableUpdate)
returns(google.protobuf.Empty) {
option (google.api.http) = {
post: "/api/v1/logical_devices/{id}/flow_groups"
body: "*"
};
}
// List all physical devices controlled by the Voltha cluster
rpc ListDevices(google.protobuf.Empty) returns(Devices) {
option (google.api.http) = {
get: "/api/v1/devices"
};
}
// Get more information on a given physical device
rpc GetDevice(ID) returns(Device) {
option (google.api.http) = {
get: "/api/v1/devices/{id}"
};
}
// Pre-provision a new physical device
rpc CreateDevice(Device) returns(Device) {
option (google.api.http) = {
post: "/api/v1/devices"
body: "*"
};
}
// Activate a pre-provisioned device
rpc ActivateDevice(ID) returns(google.protobuf.Empty) {
option (google.api.http) = {
post: "/api/v1/devices/{id}/activate"
};
}
// List ports of a device
rpc ListDevicePorts(ID) returns(Ports) {
option (google.api.http) = {
get: "/api/v1/devices/{id}/ports"
};
}
// List all flows of a device
rpc ListDeviceFlows(ID) returns(openflow_13.Flows) {
option (google.api.http) = {
get: "/api/v1/devices/{id}/flows"
};
}
// List all flow groups of a device
rpc ListDeviceFlowGroups(ID) returns(openflow_13.FlowGroups) {
option (google.api.http) = {
get: "/api/v1/devices/{id}/flow_groups"
};
}
// List device types known to Voltha
rpc ListDeviceTypes(google.protobuf.Empty) returns(DeviceTypes) {
option (google.api.http) = {
get: "/api/v1/device_types"
};
}
// Get additional information on a device type
rpc GetDeviceType(ID) returns(DeviceType) {
option (google.api.http) = {
get: "/api/v1/device_types/{id}"
};
}
// List all device sharding groups
rpc ListDeviceGroups(google.protobuf.Empty) returns(DeviceGroups) {
option (google.api.http) = {
get: "/api/v1/device_groups"
};
}
// Get additional information on a device group
rpc GetDeviceGroup(ID) returns(DeviceGroup) {
option (google.api.http) = {
get: "/api/v1/device_groups/{id}"
};
}
}
/*
* Per-instance APIs
*
* These APIs are always served locally by the Voltha instance on which the
* call is made.
*/
service VolthaLocalService {
// Get information on this Voltha instance
rpc GetVolthaInstance(google.protobuf.Empty) returns(VolthaInstance) {
option (google.api.http) = {
get: "/api/v1/local"
};
}
// Get the health state of the Voltha instance
rpc GetHealth(google.protobuf.Empty) returns(HealthStatus) {
option (google.api.http) = {
get: "/api/v1/local/health"
};
}
// List all active adapters (plugins) in this Voltha instance
rpc ListAdapters(google.protobuf.Empty) returns(Adapters) {
option (google.api.http) = {
get: "/api/v1/local/adapters"
};
}
// List all logical devices managed by this Voltha instance
rpc ListLogicalDevices(google.protobuf.Empty) returns(LogicalDevices) {
option (google.api.http) = {
get: "/api/v1/local/logical_devices"
};
}
// Get additional information on given logical device
rpc GetLogicalDevice(ID) returns(LogicalDevice) {
option (google.api.http) = {
get: "/api/v1/local/logical_devices/{id}"
};
}
// List ports of a logical device
rpc ListLogicalDevicePorts(ID) returns(LogicalPorts) {
option (google.api.http) = {
get: "/api/v1/local/logical_devices/{id}/ports"
};
}
// List all flows of a logical device
rpc ListLogicalDeviceFlows(ID) returns(openflow_13.Flows) {
option (google.api.http) = {
get: "/api/v1/local/logical_devices/{id}/flows"
};
}
// Update flow table for logical device
rpc UpdateLogicalDeviceFlowTable(openflow_13.FlowTableUpdate)
returns(google.protobuf.Empty) {
option (google.api.http) = {
post: "/api/v1/local/logical_devices/{id}/flows"
body: "*"
};
}
// List all flow groups of a logical device
rpc ListLogicalDeviceFlowGroups(ID) returns(openflow_13.FlowGroups) {
option (google.api.http) = {
get: "/api/v1/local/logical_devices/{id}/flow_groups"
};
}
// Update group table for logical device
rpc UpdateLogicalDeviceFlowGroupTable(openflow_13.FlowGroupTableUpdate)
returns(google.protobuf.Empty) {
option (google.api.http) = {
post: "/api/v1/local/logical_devices/{id}/flow_groups"
body: "*"
};
}
// List all physical devices managed by this Voltha instance
rpc ListDevices(google.protobuf.Empty) returns(Devices) {
option (google.api.http) = {
get: "/api/v1/local/devices"
};
}
// Get additional information on this device
rpc GetDevice(ID) returns(Device) {
option (google.api.http) = {
get: "/api/v1/local/devices/{id}"
};
}
// Pre-provision a new physical device
rpc CreateDevice(Device) returns(Device) {
option (google.api.http) = {
post: "/api/v1/local/devices"
body: "*"
};
}
// Activate a pre-provisioned device
rpc ActivateDevice(ID) returns(google.protobuf.Empty) {
option (google.api.http) = {
post: "/api/v1/local/devices/{id}/activate"
body: "{}"
};
}
// List ports of a device
rpc ListDevicePorts(ID) returns(Ports) {
option (google.api.http) = {
get: "/api/v1/local/devices/{id}/ports"
};
}
// List all flows of a device
rpc ListDeviceFlows(ID) returns(openflow_13.Flows) {
option (google.api.http) = {
get: "/api/v1/local/devices/{id}/flows"
};
}
// List all flow groups of a device
rpc ListDeviceFlowGroups(ID) returns(openflow_13.FlowGroups) {
option (google.api.http) = {
get: "/api/v1/local/devices/{id}/flow_groups"
};
}
// List device types know to Voltha instance
rpc ListDeviceTypes(google.protobuf.Empty) returns(DeviceTypes) {
option (google.api.http) = {
get: "/api/v1/local/device_types"
};
}
// Get additional information on given device type
rpc GetDeviceType(ID) returns(DeviceType) {
option (google.api.http) = {
get: "/api/v1/local/device_types/{id}"
};
}
// List device sharding groups managed by this Voltha instance
rpc ListDeviceGroups(google.protobuf.Empty) returns(DeviceGroups) {
option (google.api.http) = {
get: "/api/v1/local/device_groups"
};
}
// Get more information on given device shard
rpc GetDeviceGroup(ID) returns(DeviceGroup) {
option (google.api.http) = {
get: "/api/v1/local/device_groups/{id}"
};
}
// Stream control packets to the dataplane
rpc StreamPacketsOut(stream openflow_13.PacketOut)
returns(google.protobuf.Empty) {
// This does not have an HTTP representation
}
// Receive control packet stream
rpc ReceivePacketsIn(google.protobuf.Empty)
returns(stream openflow_13.PacketIn) {
// This does not have an HTTP representation
}
}