syntax = "proto3";
package api;
option go_package = "github.com/brocaar/chirpstack-api/go/v3/as/external/api";
option java_package = "io.chirpstack.api.as.external.api";
option java_multiple_files = true;
option java_outer_classname = "MulticastGroupProto";
import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
// MulticastGroupService is the service managing multicast-groups.
service MulticastGroupService {
// Create creates the given multicast-group.
rpc Create(CreateMulticastGroupRequest) returns (CreateMulticastGroupResponse) {
option(google.api.http) = {
post: "/api/multicast-groups"
body: "*"
};
}
// Get returns a multicast-group given an ID.
rpc Get(GetMulticastGroupRequest) returns (GetMulticastGroupResponse) {
option(google.api.http) = {
get: "/api/multicast-groups/{id}"
};
}
// Update updates the given multicast-group.
rpc Update(UpdateMulticastGroupRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
put: "/api/multicast-groups/{multicast_group.id}"
body: "*"
};
}
// Delete deletes a multicast-group given an ID.
rpc Delete(DeleteMulticastGroupRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
delete: "/api/multicast-groups/{id}"
};
}
// List lists the available multicast-groups.
rpc List(ListMulticastGroupRequest) returns (ListMulticastGroupResponse) {
option(google.api.http) = {
get: "/api/multicast-groups"
};
}
// AddDevice adds the given device to the multicast-group.
rpc AddDevice(AddDeviceToMulticastGroupRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
post: "/api/multicast-groups/{multicast_group_id}/devices"
body: "*"
};
}
// RemoveDevice removes the given device from the multicast-group.
rpc RemoveDevice(RemoveDeviceFromMulticastGroupRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
delete: "/api/multicast-groups/{multicast_group_id}/devices/{dev_eui}"
};
}
// Enqueue adds the given item to the multicast-queue.
rpc Enqueue(EnqueueMulticastQueueItemRequest) returns (EnqueueMulticastQueueItemResponse) {
option(google.api.http) = {
post: "/api/multicast-groups/{multicast_queue_item.multicast_group_id}/queue"
body: "*"
};
}
// FlushQueue flushes the multicast-group queue.
rpc FlushQueue(FlushMulticastGroupQueueItemsRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
delete: "/api/multicast-groups/{multicast_group_id}/queue"
};
}
// ListQueue lists the items in the multicast-group queue.
rpc ListQueue(ListMulticastGroupQueueItemsRequest) returns (ListMulticastGroupQueueItemsResponse) {
option(google.api.http) = {
get: "/api/multicast-groups/{multicast_group_id}/queue"
};
}
}
enum MulticastGroupType {
// Class-C.
CLASS_C = 0;
// Class-B.
CLASS_B = 1;
}
message MulticastGroup {
// ID (string formatted UUID).
// This will be generated automatically on create.
string id = 1;
// Multicast-group name.
string name = 2;
// Multicast address (HEX encoded DevAddr).
string mc_addr = 3;
// Multicast network session key (HEX encoded AES128 key).
string mc_nwk_s_key = 4;
// Multicast application session key (HEX encoded AES128 key).
string mc_app_s_key = 5;
// Frame-counter.
uint32 f_cnt = 6;
// Multicast type.
MulticastGroupType group_type = 7;
// Data-rate.
uint32 dr = 8;
// Frequency (Hz).
uint32 frequency = 9;
// Ping-slot period.
// Mandatory for Class-B multicast groups.
uint32 ping_slot_period = 10;
// Application ID.
// After creation, this can not be updated.
int64 application_id = 12 [json_name = "applicationID"];
}
message MulticastGroupListItem {
// ID (string formatted UUID).
string id = 1;
// Multicast-group name.
string name = 2;
// Application ID.
int64 application_id = 5 [json_name = "applicationID"];
// Application name.
string application_name = 6;
}
message CreateMulticastGroupRequest {
// Multicast-group object to create.
MulticastGroup multicast_group = 1;
}
message CreateMulticastGroupResponse {
// ID of created group (string formatted UUID).
string id = 1;
}
message GetMulticastGroupRequest {
// ID (string formatted UUID).
string id = 1;
}
message GetMulticastGroupResponse {
// Multicast-group object.
MulticastGroup multicast_group = 1;
// Created at timestamp.
google.protobuf.Timestamp created_at = 2;
// Last update timestamp.
google.protobuf.Timestamp updated_at = 3;
}
message UpdateMulticastGroupRequest {
// Multicast-group object to update.
MulticastGroup multicast_group = 1;
}
message DeleteMulticastGroupRequest {
// ID (string formatted UUID).
string id = 1;
}
message AddDeviceToMulticastGroupRequest {
// Multicast-group ID (string formatted UUID).
string multicast_group_id = 1 [json_name = "multicastGroupID"];
// Device EUI (HEX encoded string).
// Note that the device and the multicast-group must share the same
// application ID.
string dev_eui = 2 [json_name = "devEUI"];
}
message RemoveDeviceFromMulticastGroupRequest {
// Multicast-group ID (string formatted UUID).
string multicast_group_id = 1 [json_name = "multicastGroupID"];
// Device EUI (HEX encoded string).
string dev_eui = 2 [json_name = "devEUI"];
}
message ListMulticastGroupRequest {
// Max number of items to return.
int64 limit = 1;
// Offset in the result-set (for pagination).
int64 offset = 2;
// Organization id to filter on.
int64 organization_id = 3 [json_name = "organizationID"];
// Device EUI (HEX encoded string) to filter on.
string dev_eui = 4 [json_name = "devEUI"];
// Search can be used to search on the multicast-group name.
string search = 6;
// Application ID to filter on.
int64 application_id = 7 [json_name = "applicationID"];
}
message ListMulticastGroupResponse {
// Total number of multicast-groups.
int64 total_count = 1;
repeated MulticastGroupListItem result = 2;
}
message MulticastQueueItem {
// Multicast-group ID (string formatted UUID).
string multicast_group_id = 1 [json_name = "multicastGroupID"];
// Downlink frame-counter.
// This will be automatically set on enqueue.
uint32 f_cnt = 2;
// FPort used (must be > 0).
uint32 f_port = 3;
// Base64 encoded data.
bytes data = 4;
}
message EnqueueMulticastQueueItemRequest {
// Multicast queue-item object to enqueue.
MulticastQueueItem multicast_queue_item = 1;
}
message EnqueueMulticastQueueItemResponse {
// Frame-counter for the enqueued payload.
uint32 f_cnt = 1;
}
message FlushMulticastGroupQueueItemsRequest {
// Multicast-group ID (string formatted UUID).
string multicast_group_id = 1 [json_name = "multicastGroupID"];
}
message ListMulticastGroupQueueItemsRequest {
// Multicast-group ID (string formatted UUID).
string multicast_group_id = 1 [json_name = "multicastGroupID"];
}
message ListMulticastGroupQueueItemsResponse {
repeated MulticastQueueItem multicast_queue_items = 1;
}