blob: 3138fe51cae29a1559f1eddf2242c7ed967fd729 [file] [log] [blame]
// Copyright 2017 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto3";
option cc_enable_arenas = true;
// This file defines services that will be running on the host for the VM.
package vm_tools;
option go_package = "go.chromium.org/chromiumos/vm_tools/vm_rpc";
import "common.proto";
// Timestamp message as defined by google.protobuf.timestamp.proto
message Timestamp {
// Represents seconds of UTC time since Unix epoch
// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
// 9999-12-31T23:59:59Z inclusive.
int64 seconds = 1;
// Non-negative fractions of a second at nanosecond resolution. Negative
// second values with fractions must still have non-negative nanos values
// that count forward in time. Must be from 0 to 999,999,999
// inclusive.
int32 nanos = 2;
}
// Log severity levels as described by RFC3164. The values don't line up with
// the ones defined by RFC3164 because proto3 requires all fields to have
// default values and the default value for an enum is 0. In case the severity
// field is missing it's better to default to UNKNOWN instead of EMERGENCY.
enum LogSeverity {
MISSING = 0; // Default value.
EMERGENCY = 1; // System is unusable.
ALERT = 2; // Action must be taken immediately.
CRITICAL = 3; // Critical conditions.
ERROR = 4; // Error conditions.
WARNING = 5; // Warning conditions.
NOTICE = 6; // Normal but significant condition.
INFO = 7; // Informational messages.
DEBUG = 8; // Debug-level messages.
}
// Serialized log message.
message LogRecord {
// Severity of the message.
LogSeverity severity = 1;
// Time that the message was created.
Timestamp timestamp = 2;
// Actual content of the message.
bytes content = 5;
}
// A request to log information. Multiple records may be coalesced into a
// single request.
message LogRequest {
repeated LogRecord records = 1;
}
// The LogCollector service stores log records that were generated from within
// a VM in a persistent location outside the VM.
service LogCollector {
// Collect and store logs generated by the VM kernel.
rpc CollectKernelLogs(LogRequest) returns (EmptyMessage);
// Collect and store logs generated by userspace applications inside the VM.
rpc CollectUserLogs(LogRequest) returns (EmptyMessage);
}
// Service that is notified whenever a new VM starts up.
service StartupListener {
// Called by each VM when it starts up to indicate that it is ready to handle
// incoming requests.
rpc VmReady(EmptyMessage) returns (EmptyMessage);
// Called by VM installers to indicate installation status
rpc VmInstallStatus(VmInstallState) returns (EmptyMessage);
}
// A message representing the outcome of VM installs
message VmInstallState {
enum State {
UNKNOWN = 0;
IN_PROGRESS = 1;
FAILED = 2;
SUCCEEDED = 3;
}
State state = 1;
enum Step {
unknown = 0;
launcher_start = 1;
core_start = 2;
install_fetch_image = 3;
install_configure = 4;
install_done = 5;
install_success = 6;
install_failure = 7;
}
Step in_progress_step = 2;
int64 in_progress_percent = 3;
string failed_reason = 4;
}
// A message representing one of more log messages from the serial out
// of a specific VM. Used by anomaly_detector. Placed in this package
// because it needs to include LogRequest.
message VmKernelLogRequest {
// The type of VM sending logs. Note that the values here should match
// the ones in concierge_service.proto for ease of conversion.
enum VmType {
// Default value indicating an unknown or custom VM.
UNKNOWN = 0;
// VM is associated with a specific feature.
TERMINA = 1;
ARC_VM = 2;
PLUGIN_VM = 3;
BOREALIS = 4;
BRUSCHETTA = 5;
BAGUETTE = 6;
};
VmType vm_type = 1;
int32 cid = 2;
repeated LogRecord records = 3;
}