blob: edb7c630dc85e9b6a3cf34cc4dedf8bf91dfd434 [file] [log] [blame]
// Copyright 2022 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package netsim.frontend;
import "google/protobuf/empty.proto";
import "model.proto";
/**
* The frontend service for the network simulator.
*
* The network simulator interconnects virtual radio controllers on emulated
* android and accessory devices to allows control of the topology, device
* positions, and RF characteristics.
*
* Clients of the frontend service include a Command Line Interface (cli), Mobly
* scripts, and a web UI.
*
*/
service FrontendService {
// Get the version of the netsim service.
rpc GetVersion(google.protobuf.Empty) returns (VersionResponse);
// Register for device movement and emulated radio state events
rpc RegisterEvents(google.protobuf.Empty) returns (stream Event);
// Get a list of devices
rpc GetDevices(google.protobuf.Empty) returns (GetDevicesResponse);
// Patch a device
rpc PatchDevice(PatchDeviceRequest) returns (google.protobuf.Empty);
// Reset all devices.
rpc Reset(google.protobuf.Empty) returns (google.protobuf.Empty);
// TODO: Other hwsim commands - addAccessPoint, addLink, ...
// Methods not implement yet.
// Set a simplified Link Loss Model
rpc SetLinkLoss(SetLinkLossRequest) returns (google.protobuf.Empty);
// Radio properties (simplified view of txpower)
// Set the specified emulated radio chip's range.
// Register for network logs
rpc NetCat(google.protobuf.Empty) returns (stream NetCatStream);
// Patch a Capture source to turn capture on/off.
// When turned on the old capture contents are replaced.
rpc PatchCapture(PatchCaptureRequest) returns (google.protobuf.Empty);
// List all Captures currently connected on netsim.
rpc ListCapture(google.protobuf.Empty) returns (ListCaptureResponse);
// Retrieve the contents of the packet capture as streaming bytes
rpc GetCapture(GetCaptureRequest) returns (stream GetCaptureResponse);
}
message VersionResponse {
string version = 1;
}
// Set a fixed error probabilities for a link, where a value of 0% is
// a perfect medium. This is a simple model that does not take into
// account losses due to transmission rates and signal-to-noise ratio.
message SetLinkLossRequest {
string device_name = 1;
string other_device = 2;
netsim.model.PhyKind radio = 3;
// As a percent between 0 and 1
float link_loss = 4;
}
message PatchDeviceRequest {
netsim.model.Device device = 2; // by id or name
}
// Event when simulation state changes.
message Event {
repeated netsim.model.Device devices = 1;
}
// Response for GetDevices request.
//
// Returns the emulators and accessory devices that are connected to
// the network simulator.
message GetDevicesResponse {
repeated netsim.model.Device devices = 1;
}
// Response to the NetCat request.
//
// NetCat provides a streaming log of network operations.
message NetCatStream {
repeated string result = 1;
}
message SetPacketCaptureRequest {
bool capture = 1;
string device_serial = 2;
}
message PatchCaptureRequest {
int32 id = 1;
// Body of PatchCapture that will be channeled into
// body for HandleCaptureCxx
message PatchCapture {
netsim.model.State state = 1;
}
PatchCapture patch = 2;
}
message ListCaptureResponse {
repeated netsim.model.Capture captures = 1;
}
message GetCaptureRequest {
int32 id = 1;
}
message GetCaptureResponse {
bytes capture_stream = 1;
}
message ErrorResponse {
int32 code = 1;
string error_message = 2;
string status = 3;
}