blob: d8b74ca93439dc267b9d3abbdc8de993388b9907 [file] [log] [blame]
Amit Ghosh09f28362020-06-12 21:52:19 +01001syntax = "proto3";
2
3option go_package = "github.com/opencord/device-management-interface/v3/go/dmi";
4package dmi;
5
6import "dmi/commons.proto";
7import "dmi/hw.proto";
Andrea Campanellacb990bc2020-09-22 12:50:56 +02008import "google/protobuf/empty.proto";
Amit Ghosh09f28362020-06-12 21:52:19 +01009
10// Protos for the management of a hardware and it's components
11
12message PhysicalInventoryRequest {
13 Uuid device_uuid = 1;
14}
15
16message PhysicalInventoryResponse {
amit.ghoshae473032021-01-10 11:59:10 +010017 enum Reason {
18 UNDEFINED_REASON = 0;
19 UNKNOWN_DEVICE = 1;
20 INTERNAL_ERROR = 2;
amit.ghoshbd2022e2021-02-22 05:58:53 +010021 DEVICE_UNREACHABLE = 3;
amit.ghoshae473032021-01-10 11:59:10 +010022 }
Amit Ghosh09f28362020-06-12 21:52:19 +010023 Status status = 1;
24 Reason reason = 2;
25 Hardware inventory = 3;
amit.ghosh8ab1e6e2021-02-23 07:40:17 +010026 // It is recommended that upstream components/users of the DMI interface
27 // do not really interpret/parse the reson_detail, but rather use it for
28 // display purposes to the end user or use it for logging the error
29 string reason_detail = 4;
Amit Ghosh09f28362020-06-12 21:52:19 +010030}
31
32message HWComponentInfoGetRequest {
33 Uuid device_uuid = 1;
34 Uuid component_uuid = 2;
35 string component_name = 3;
36}
37
aghoshc301dcd2020-09-03 16:55:34 +010038message HWComponentInfoGetResponse {
amit.ghoshae473032021-01-10 11:59:10 +010039 enum Reason {
40 UNDEFINED_REASON = 0;
41 UNKNOWN_DEVICE = 1;
42 UNKNOWN_COMPONENT = 2;
43 INTERNAL_ERROR = 3;
amit.ghoshbd2022e2021-02-22 05:58:53 +010044 DEVICE_UNREACHABLE = 4;
amit.ghoshae473032021-01-10 11:59:10 +010045 }
aghoshc301dcd2020-09-03 16:55:34 +010046 Status status = 1;
47 Reason reason = 2;
48 Component component = 3;
amit.ghosh8ab1e6e2021-02-23 07:40:17 +010049 string reason_detail = 4;
aghoshc301dcd2020-09-03 16:55:34 +010050}
51
Amit Ghosh09f28362020-06-12 21:52:19 +010052message HWComponentInfoSetRequest {
53 Uuid device_uuid = 1;
54 Uuid component_uuid = 2;
55 string component_name = 3;
56 ModifiableComponent changes = 4;
57}
58
59message HWComponentInfoSetResponse {
amit.ghoshae473032021-01-10 11:59:10 +010060 enum Reason {
61 UNDEFINED_REASON = 0;
62 UNKNOWN_DEVICE = 1;
63 UNKNOWN_COMPONENT = 2;
64 INVALID_PARAMS = 3;
65 INTERNAL_ERROR = 4;
amit.ghoshbd2022e2021-02-22 05:58:53 +010066 DEVICE_UNREACHABLE = 5;
Girish Gowdra997432d2022-03-10 15:59:33 -080067 SET_UNSUPPORTED = 6;
amit.ghoshae473032021-01-10 11:59:10 +010068 }
Amit Ghosh09f28362020-06-12 21:52:19 +010069 Status status = 1;
70 Reason reason = 2;
amit.ghosh8ab1e6e2021-02-23 07:40:17 +010071 string reason_detail = 3;
Amit Ghosh09f28362020-06-12 21:52:19 +010072}
73
74message StartManagingDeviceResponse {
amit.ghoshae473032021-01-10 11:59:10 +010075 enum Reason {
76 UNDEFINED_REASON = 0;
77 // DEVICE_ALREADY_MANAGED is returned when StartManagingDevice is called again for the same name AFTER a previously
78 // successful StartManagingDevice operation
79 DEVICE_ALREADY_MANAGED = 1;
80 // OPERATION_ALREADY_IN_PROGRESS is returned when StartManagingDevice is called again for the same name BEFORE
81 // a previous StartManagingDevice operation has completed
82 OPERATION_ALREADY_IN_PROGRESS = 2;
83 INVALID_PARAMS = 3;
84 INTERNAL_ERROR = 4;
amit.ghosh6bdb0f72021-06-02 14:42:29 +020085 // AUTHENTICATION_FAILURE is returned when the device management software/server is not able to connect to the underlying
86 // hardware because of authentication failures
87 AUTHENTICATION_FAILURE = 5;
88 // INCOMPATIBLE_DEVICE is returned when there is a mismatch between the device management software/server and the underlying
89 // hardware
90 INCOMPATIBLE_DEVICE = 6;
amit.ghoshae473032021-01-10 11:59:10 +010091 }
Amit Ghosh09f28362020-06-12 21:52:19 +010092 Status status = 1;
93 Reason reason = 2;
94 Uuid device_uuid = 3;
amit.ghosh8ab1e6e2021-02-23 07:40:17 +010095 string reason_detail = 4;
Amit Ghosh09f28362020-06-12 21:52:19 +010096}
97
Amit Ghosh366228e2020-07-06 13:46:42 +010098message StopManagingDeviceRequest {
99 string name = 1;
100}
101
102message StopManagingDeviceResponse {
amit.ghoshae473032021-01-10 11:59:10 +0100103 // The only case in which an error is expected is if the name of the
104 // device to be stopped is not found
105 enum Reason {
106 UNDEFINED_REASON = 0;
amit.ghosh0c687412021-03-24 19:01:08 +0100107 UNKNOWN_DEVICE = 1;
amit.ghoshdd12d882022-07-01 12:32:36 +0200108 // DEVICE_UNREACHABLE is to be returned when the device manager cannot reach the device and stop managing it
109 DEVICE_UNREACHABLE = 2;
amit.ghoshae473032021-01-10 11:59:10 +0100110 }
Amit Ghosh366228e2020-07-06 13:46:42 +0100111 Status status = 1;
112 Reason reason = 2;
amit.ghosh8ab1e6e2021-02-23 07:40:17 +0100113 string reason_detail = 3;
Amit Ghosh366228e2020-07-06 13:46:42 +0100114}
115
amit.ghosh0c687412021-03-24 19:01:08 +0100116message ManagedDeviceInfo {
117 ModifiableComponent info = 1;
118 Uuid device_uuid = 2;
119}
120
Andrea Campanellacb990bc2020-09-22 12:50:56 +0200121message ManagedDevicesResponse {
amit.ghosh0c687412021-03-24 19:01:08 +0100122 enum Reason {
123 UNDEFINED_REASON = 0;
124 INTERNAL_ERROR = 1;
125 }
126 Status status = 1;
127 Reason reason = 2;
128 repeated ManagedDeviceInfo devices = 3;
Andrea Campanellacb990bc2020-09-22 12:50:56 +0200129}
130
amit.ghosh188a84f2020-09-27 20:59:25 +0200131message SetLoggingEndpointRequest {
132 Uuid device_uuid = 1;
133 string logging_endpoint = 2;
134 string logging_protocol = 3;
135}
136
137message SetRemoteEndpointResponse {
amit.ghoshae473032021-01-10 11:59:10 +0100138 enum Reason {
139 UNDEFINED_REASON = 0;
140 UNKNOWN_DEVICE = 1;
141 INTERNAL_ERROR = 2;
142 LOGGING_ENDPOINT_ERROR = 3;
143 LOGGING_ENDPOINT_PROTOCOL_ERROR = 4;
144 MSGBUS_ENDPOINT_ERROR = 5;
amit.ghoshbd2022e2021-02-22 05:58:53 +0100145 DEVICE_UNREACHABLE = 6;
amit.ghoshae473032021-01-10 11:59:10 +0100146 }
amit.ghosh188a84f2020-09-27 20:59:25 +0200147 Status status = 1;
148 Reason reason = 2;
amit.ghosh8ab1e6e2021-02-23 07:40:17 +0100149 string reason_detail = 3;
amit.ghosh188a84f2020-09-27 20:59:25 +0200150}
151
152message GetLoggingEndpointResponse {
amit.ghoshae473032021-01-10 11:59:10 +0100153 enum Reason {
154 UNDEFINED_REASON = 0;
155 UNKNOWN_DEVICE = 1;
156 INTERNAL_ERROR = 2;
amit.ghoshbd2022e2021-02-22 05:58:53 +0100157 DEVICE_UNREACHABLE = 3;
amit.ghoshae473032021-01-10 11:59:10 +0100158 }
amit.ghosh188a84f2020-09-27 20:59:25 +0200159 Status status = 1;
160 Reason reason = 2;
161 string logging_endpoint = 3;
162 string logging_protocol = 4;
amit.ghosh8ab1e6e2021-02-23 07:40:17 +0100163 string reason_detail = 5;
amit.ghosh188a84f2020-09-27 20:59:25 +0200164}
165
166message SetMsgBusEndpointRequest {
167 string msgbus_endpoint = 1;
168}
169
170message GetMsgBusEndpointResponse {
amit.ghoshae473032021-01-10 11:59:10 +0100171 enum Reason {
172 UNDEFINED_REASON = 0;
173 INTERNAL_ERROR = 1;
amit.ghoshbd2022e2021-02-22 05:58:53 +0100174 DEVICE_UNREACHABLE = 2;
amit.ghoshae473032021-01-10 11:59:10 +0100175 }
amit.ghosh188a84f2020-09-27 20:59:25 +0200176 Status status = 1;
177 Reason reason = 2;
178 string msgbus_endpoint = 3;
amit.ghosh8ab1e6e2021-02-23 07:40:17 +0100179 string reason_detail = 4;
amit.ghosh188a84f2020-09-27 20:59:25 +0200180}
181
Andrea Campanellab91e9a42020-10-09 14:31:43 +0200182message EntitiesLogLevel {
183 LogLevel logLevel = 1;
184 repeated string entities = 2;
185}
186
187message SetLogLevelRequest {
188 Uuid device_uuid = 1;
189 repeated EntitiesLogLevel loglevels = 2;
190}
191
192message SetLogLevelResponse {
amit.ghoshae473032021-01-10 11:59:10 +0100193 enum Reason {
194 UNDEFINED_REASON = 0;
195 UNKNOWN_DEVICE = 1;
196 INTERNAL_ERROR = 2;
197 UNKNOWN_LOG_ENTITY = 3;
amit.ghoshbd2022e2021-02-22 05:58:53 +0100198 DEVICE_UNREACHABLE = 4;
amit.ghoshae473032021-01-10 11:59:10 +0100199 }
Andrea Campanellab91e9a42020-10-09 14:31:43 +0200200 Uuid device_uuid = 1;
201 Status status = 2;
202 Reason reason = 3;
amit.ghosh8ab1e6e2021-02-23 07:40:17 +0100203 string reason_detail = 4;
Andrea Campanellab91e9a42020-10-09 14:31:43 +0200204}
205
206message GetLogLevelRequest {
207 Uuid device_uuid = 1;
208 repeated string entities = 2;
209}
210
211message GetLogLevelResponse {
amit.ghoshae473032021-01-10 11:59:10 +0100212 enum Reason {
213 UNDEFINED_REASON = 0;
214 UNKNOWN_DEVICE = 1;
215 INTERNAL_ERROR = 2;
216 UNKNOWN_LOG_ENTITY = 3;
amit.ghoshbd2022e2021-02-22 05:58:53 +0100217 DEVICE_UNREACHABLE = 4;
amit.ghoshae473032021-01-10 11:59:10 +0100218 }
Andrea Campanellab91e9a42020-10-09 14:31:43 +0200219 Uuid device_uuid = 1;
220 repeated EntitiesLogLevel logLevels = 2;
221 Status status = 3;
222 Reason reason = 4;
amit.ghosh8ab1e6e2021-02-23 07:40:17 +0100223 string reason_detail = 5;
Andrea Campanellab91e9a42020-10-09 14:31:43 +0200224}
225
226message GetLoggableEntitiesRequest {
227 Uuid device_uuid = 1;
228}
229
Chandrakanth Nalkudre Gowda415b83c2021-04-28 18:01:29 +0530230message Heartbeat {
231 fixed32 heartbeat_signature = 1;
232}
233
Chandrakanth Nalkudre Gowda2f6066c2021-05-13 12:36:32 +0530234message RebootDeviceRequest {
235 Uuid device_uuid = 1;
236}
237
238message RebootDeviceResponse {
239 enum Reason {
240 UNDEFINED_REASON = 0;
241 UNKNOWN_DEVICE = 1;
242 INTERNAL_ERROR = 2;
243 DEVICE_UNREACHABLE = 3;
amit.ghosh840cb602022-04-08 16:10:50 +0200244 DEVICE_IN_WRONG_STATE = 4; // This reason would be returned by the Device Manager if doing the reboot could lead the device to an inconsistent state.
245 // For example, if a RebootRequest is issued while the startup configuration is being updated
Chandrakanth Nalkudre Gowda2f6066c2021-05-13 12:36:32 +0530246 }
247 Status status = 3;
248 Reason reason = 4;
249 string reason_detail = 5;
250}
251
Amit Ghosh09f28362020-06-12 21:52:19 +0100252service NativeHWManagementService {
253 // Initializes context for a device and sets up required states
Amit Ghosh704462f2020-06-24 16:44:56 +0100254 // In the call to StartManagingDevice, the fields of ModifiableComponent which are relevant
255 // and their meanings in this context is mentioned below:
256 // name = The unique name that needs to be assigned to this hardware;
257 // class = COMPONENT_TYPE_UNDEFINED;
258 // parent = nil;
259 // alias = Optional;
260 // asset_id = Optional;
261 // uri = IP Address of the Hardware;
262 rpc StartManagingDevice(ModifiableComponent) returns(stream StartManagingDeviceResponse);
Amit Ghosh09f28362020-06-12 21:52:19 +0100263
Amit Ghosh366228e2020-07-06 13:46:42 +0100264 // Stop management of a device and clean up any context and caches for that device
amit.ghoshae473032021-01-10 11:59:10 +0100265 // This rpc can be called at any time, even before the StartManagingDevice operation
266 // has completed, and should be able to cleanup.
Amit Ghosh366228e2020-07-06 13:46:42 +0100267 rpc StopManagingDevice(StopManagingDeviceRequest) returns(StopManagingDeviceResponse);
268
Andrea Campanellacb990bc2020-09-22 12:50:56 +0200269 // Returns an object containing a list of devices managed by this entity
270 rpc GetManagedDevices(google.protobuf.Empty) returns(ManagedDevicesResponse);
271
Amit Ghosh09f28362020-06-12 21:52:19 +0100272 // Get the HW inventory details of the Device
273 rpc GetPhysicalInventory(PhysicalInventoryRequest) returns(stream PhysicalInventoryResponse);
274
275 // Get the details of a particular HW component
aghoshc301dcd2020-09-03 16:55:34 +0100276 rpc GetHWComponentInfo(HWComponentInfoGetRequest) returns(stream HWComponentInfoGetResponse);
Amit Ghosh09f28362020-06-12 21:52:19 +0100277
278 // Sets the permissible attributes of a HW component
279 rpc SetHWComponentInfo(HWComponentInfoSetRequest) returns(HWComponentInfoSetResponse);
amit.ghosh188a84f2020-09-27 20:59:25 +0200280
281 // Sets the location to which logs need to be shipped
282 rpc SetLoggingEndpoint(SetLoggingEndpointRequest) returns(SetRemoteEndpointResponse);
283
284 // Gets the configured location to which the logs are being shipped
amit.ghosh5d97dba2020-11-12 16:45:27 +0100285 rpc GetLoggingEndpoint(HardwareID) returns(GetLoggingEndpointResponse);
amit.ghosh188a84f2020-09-27 20:59:25 +0200286
287 // Sets the location of the Message Bus to which events and metrics are shipped
288 rpc SetMsgBusEndpoint(SetMsgBusEndpointRequest) returns(SetRemoteEndpointResponse);
289
290 // Gets the configured location to which the events and metrics are being shipped
291 rpc GetMsgBusEndpoint(google.protobuf.Empty) returns(GetMsgBusEndpointResponse);
Andrea Campanellab91e9a42020-10-09 14:31:43 +0200292
293 // Gets the entities of a device on which log can be configured. A few are expected, like OS, PON Management etc.
294 // In general an entity is any item within an hardware system that can emit logs, e.g. service, process, subsystem,
295 // interface, package etc.
296 rpc GetLoggableEntities(GetLoggableEntitiesRequest) returns(GetLogLevelResponse);
297
amit.ghosh5d97dba2020-11-12 16:45:27 +0100298 // Sets the log level of the device, for each given entity to a certain level.
Andrea Campanellab91e9a42020-10-09 14:31:43 +0200299 // If only one EntitiesLogLevel is provided for the device and that request contains only a log level with
300 // no entity in the list it's assumed that the caller wants to set that level for all the entities.
301 rpc SetLogLevel(SetLogLevelRequest) returns(SetLogLevelResponse);
302
303 // Gets the configured log level for a certain entity on a certain device.
304 // If no entity is specified in the request all the entities with their log level should be returned.
305 rpc GetLogLevel(GetLogLevelRequest) returns(GetLogLevelResponse);
Chandrakanth Nalkudre Gowda415b83c2021-04-28 18:01:29 +0530306
307 // Performs the heartbeat check
308 rpc HeartbeatCheck(google.protobuf.Empty) returns (Heartbeat);
Chandrakanth Nalkudre Gowda2f6066c2021-05-13 12:36:32 +0530309
310 // Performs the reboot of the device
311 rpc RebootDevice(RebootDeviceRequest) returns(RebootDeviceResponse);
Amit Ghosh09f28362020-06-12 21:52:19 +0100312}