Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 1 | syntax = "proto3";
|
| 2 |
|
| 3 | option go_package = "github.com/opencord/device-management-interface/v3/go/dmi";
|
| 4 | package dmi;
|
| 5 |
|
| 6 | import "google/protobuf/timestamp.proto";
|
| 7 |
|
| 8 | // The model used to represent a HW is based on RFC8348 (https://tools.ietf.org/html/rfc8348)
|
| 9 |
|
| 10 | message Uuid {
|
| 11 | string uuid = 1;
|
| 12 | }
|
| 13 |
|
| 14 | message HardwareID {
|
| 15 | Uuid uuid = 1;
|
| 16 | }
|
| 17 |
|
| 18 | message Uri {
|
| 19 | string uri = 1;
|
| 20 | }
|
| 21 |
|
| 22 | enum ComponentType {
|
| 23 | COMPONENT_TYPE_UNDEFINED = 0;
|
| 24 | COMPONENT_TYPE_UNKNOWN = 1;
|
| 25 | COMPONENT_TYPE_CHASSIS = 2;
|
| 26 | COMPONENT_TYPE_BACKPLANE = 3;
|
| 27 | COMPONENT_TYPE_CONTAINER = 4;
|
| 28 | COMPONENT_TYPE_POWER_SUPPLY = 5;
|
| 29 | COMPONENT_TYPE_FAN = 6;
|
| 30 | COMPONENT_TYPE_SENSOR = 7;
|
| 31 | COMPONENT_TYPE_MODULE = 8;
|
| 32 | COMPONENT_TYPE_PORT = 9;
|
| 33 | COMPONENT_TYPE_CPU = 10;
|
| 34 | COMPONENT_TYPE_BATTERY = 11;
|
| 35 | COMPONENT_TYPE_STORAGE = 12;
|
| 36 | COMPONENT_TYPE_MEMORY = 13;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame^] | 37 | // A component of type "TRANSCEIVER" could have 0 or more components of type "PORT" as children.
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 38 | COMPONENT_TYPE_TRANSCEIVER = 14;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame^] | 39 | // Removing the below two specific types of transceivers as we introduce a specific attribute
|
| 40 | // called type of the transeiver which can be used to convey the same information
|
| 41 | // Will deprecate these two in the future.
|
| 42 | //COMPONENT_TYPE_GPON_TRANSCEIVER = 15;
|
| 43 | //COMPONENT_TYPE_XGS_PON_TRANSCEIVER = 16;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 44 | }
|
| 45 |
|
| 46 | enum ComponentAdminState {
|
| 47 | COMP_ADMIN_STATE_UNDEFINED = 0;
|
| 48 | COMP_ADMIN_STATE_UNKNOWN = 1;
|
| 49 | COMP_ADMIN_STATE_LOCKED = 2;
|
| 50 | COMP_ADMIN_STATE_SHUTTING_DOWN = 3;
|
| 51 | COMP_ADMIN_STATE_UNLOCKED = 4;
|
| 52 | }
|
| 53 |
|
| 54 | enum ComponentOperState {
|
| 55 | COMP_OPER_STATE_UNDEFINED = 0;
|
| 56 | COMP_OPER_STATE_UNKNOWN = 1;
|
| 57 | COMP_OPER_STATE_DISABLED = 2;
|
| 58 | COMP_OPER_STATE_ENABLED = 3;
|
| 59 | COMP_OPER_STATE_TESTING = 4;
|
| 60 | }
|
| 61 |
|
| 62 | enum ComponentUsageState {
|
| 63 | COMP_USAGE_STATE_UNDEFINED = 0;
|
| 64 | COMP_USAGE_STATE_UNKNOWN = 1;
|
| 65 | COMP_USAGE_STATE_IDLE = 2;
|
| 66 | COMP_USAGE_STATE_ACTIVE = 3;
|
| 67 | COMP_USAGE_STATE_BUSY = 4;
|
| 68 | }
|
| 69 |
|
| 70 | enum ComponentAlarmState {
|
| 71 | COMP_ALARM_STATE_UNDEFINED = 0;
|
| 72 | COMP_ALARM_STATE_UNKNOWN = 1;
|
| 73 | COMP_ALARM_STATE_UNDER_REPAIR= 2;
|
| 74 | COMP_ALARM_STATE_CRITICAL = 3;
|
| 75 | COMP_ALARM_STATE_MAJOR = 4;
|
| 76 | COMP_ALARM_STATE_MINOR = 5;
|
| 77 | COMP_ALARM_STATE_WARNING = 6;
|
amit.ghosh | 3a5c7f1 | 2020-12-11 13:56:26 +0100 | [diff] [blame] | 78 | COMP_ALARM_STATE_INDETERMINATE = 7;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 79 | }
|
| 80 |
|
| 81 | enum ComponentStandbyState {
|
| 82 | COMP_STANDBY_STATE_UNDEFINED = 0;
|
| 83 | COMP_STANDBY_STATE_UNKNOWN = 1;
|
| 84 | COMP_STANDBY_STATE_HOT = 2;
|
| 85 | COMP_STANDBY_STATE_COLD = 3;
|
| 86 | COMP_STANDBY_STATE_PROVIDING_SERVICE = 4;
|
| 87 | }
|
| 88 |
|
| 89 | message ComponentState {
|
| 90 | google.protobuf.Timestamp state_last_changed = 1;
|
| 91 | ComponentAdminState admin_state = 2;
|
| 92 | ComponentOperState oper_state = 3;
|
| 93 | ComponentUsageState usage_state = 4;
|
| 94 | ComponentAlarmState alarm_state = 5;
|
| 95 | ComponentStandbyState standby_state = 6;
|
| 96 | }
|
| 97 |
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame^] | 98 | enum DataValueType {
|
| 99 | VALUE_TYPE_UNDEFINED = 0;
|
| 100 | VALUE_TYPE_OTHER = 1;
|
| 101 | VALUE_TYPE_UNKNOWN = 2;
|
| 102 | VALUE_TYPE_VOLTS_AC = 3;
|
| 103 | VALUE_TYPE_VOLTS_DC = 4;
|
| 104 | VALUE_TYPE_AMPERES = 5;
|
| 105 | VALUE_TYPE_WATTS = 6;
|
| 106 | VALUE_TYPE_HERTZ = 7;
|
| 107 | VALUE_TYPE_CELSIUS = 8;
|
| 108 | VALUE_TYPE_PERCENT_RH = 9;
|
| 109 | VALUE_TYPE_RPM = 10;
|
| 110 | VALUE_TYPE_CMM = 11;
|
| 111 | VALUE_TYPE_TRUTH_VALUE = 12;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 112 | }
|
| 113 |
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame^] | 114 | enum ValueScale {
|
| 115 | VALUE_SCALE_UNDEFINED = 0;
|
| 116 | VALUE_SCALE_YOCTO = 1;
|
| 117 | VALUE_SCALE_ZEPTO = 2;
|
| 118 | VALUE_SCALE_ATTO = 3;
|
| 119 | VALUE_SCALE_FEMTO = 4;
|
| 120 | VALUE_SCALE_PICO = 5;
|
| 121 | VALUE_SCALE_NANO = 6;
|
| 122 | VALUE_SCALE_MICRO = 7;
|
| 123 | VALUE_SCALE_MILLI = 8;
|
| 124 | VALUE_SCALE_UNITS = 9;
|
| 125 | VALUE_SCALE_KILO = 10;
|
| 126 | VALUE_SCALE_MEGA = 11;
|
| 127 | VALUE_SCALE_GIGA = 12;
|
| 128 | VALUE_SCALE_TERA = 13;
|
| 129 | VALUE_SCALE_PETA = 14;
|
| 130 | VALUE_SCALE_EXA = 15;
|
| 131 | VALUE_SCALE_ZETTA = 16;
|
| 132 | VALUE_SCALE_YOTTA =17;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 133 | }
|
| 134 |
|
| 135 | enum SensorStatus {
|
| 136 | SENSOR_STATUS_UNDEFINED = 0;
|
| 137 | SENSOR_STATUS_OK = 1;
|
| 138 | SENSOR_STATUS_UNAVAILABLE = 2;
|
| 139 | SENSOR_STATUS_NONOPERATIONAL = 3;
|
| 140 | }
|
| 141 |
|
| 142 | message ComponentSensorData {
|
| 143 | int32 value = 1;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame^] | 144 | DataValueType type = 2;
|
| 145 | ValueScale scale = 3;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 146 | int32 precision = 4;
|
| 147 | SensorStatus status = 5;
|
| 148 | string units_display = 6;
|
| 149 | google.protobuf.Timestamp timestamp = 7;
|
| 150 | uint32 value_update_rate = 8;
|
| 151 | // data_type can be of the string representation of MetricNames or something else as well
|
| 152 | string data_type = 9;
|
| 153 | }
|
| 154 |
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame^] | 155 | message PortComponentAttributes{
|
| 156 | enum ConnectorType {
|
| 157 | CONNECTOR_TYPE_UNDEFINED = 0;
|
| 158 | RJ45 = 1;
|
| 159 | FIBER_LC = 2;
|
| 160 | FIBER_SC_PC = 3;
|
| 161 | FIBER_MPO = 4;
|
| 162 | }
|
| 163 | enum Speed {
|
| 164 | SPEED_UNDEFINED = 0;
|
| 165 | DYNAMIC = 1;
|
| 166 | GIGABIT_1 = 2;
|
| 167 | GIGABIT_10 = 3;
|
| 168 | GIGABIT_25 = 4;
|
| 169 | GIGABIT_40 = 5;
|
| 170 | GIGABIT_100 = 6;
|
| 171 | GIGABIT_400 = 7;
|
| 172 | MEGABIT_2500 = 8;
|
| 173 | MEGABIT_1250 = 9;
|
| 174 | }
|
| 175 | enum Protocol {
|
| 176 | PROTOCOL_UNDEFINED = 0;
|
| 177 | ETHERNET = 1;
|
| 178 | GPON = 2;
|
| 179 | XGPON = 3;
|
| 180 | XGSPON = 4;
|
| 181 | GFAST = 5;
|
| 182 | SERIAL = 6;
|
| 183 | EPON = 7;
|
| 184 | }
|
| 185 | ConnectorType connector_type = 1;
|
| 186 | Speed speed = 2;
|
| 187 | Protocol protocol = 3;
|
| 188 | string physical_label = 4;
|
| 189 | }
|
| 190 |
|
| 191 | message ContainerComponentAttributes{
|
| 192 | string physical_label = 1;
|
| 193 | }
|
| 194 |
|
| 195 | message PsuComponentAttributes{
|
| 196 | enum SupportedVoltage {
|
| 197 | SUPPORTED_VOLTAGE_UNDEFINED = 0;
|
| 198 | V48 = 1;
|
| 199 | V230 = 2;
|
| 200 | V115 = 3;
|
| 201 | }
|
| 202 | SupportedVoltage supported_voltage = 1;
|
| 203 | }
|
| 204 |
|
| 205 | message TransceiverComponentsAttributes{
|
| 206 | enum FormFactor {
|
| 207 | FORM_FACTOR_UNKNOWN = 0;
|
| 208 | QSFP = 1;
|
| 209 | QSFP_PLUS = 2;
|
| 210 | QSFP28 = 3;
|
| 211 | SFP = 4;
|
| 212 | SFP_PLUS = 5;
|
| 213 | XFP = 6;
|
| 214 | CFP4 = 7;
|
| 215 | CFP2 = 8;
|
| 216 | CPAK = 9;
|
| 217 | X2 = 10;
|
| 218 | OTHER = 11;
|
| 219 | CFP = 12;
|
| 220 | CFP2_ACO = 13;
|
| 221 | CFP2_DCO = 14;
|
| 222 | }
|
| 223 |
|
| 224 | enum Type {
|
| 225 | TYPE_UNKNOWN = 0;
|
| 226 | ETHERNET = 1;
|
| 227 | GPON = 2;
|
| 228 | XGPON = 3;
|
| 229 | XGSPON = 4;
|
| 230 | CPON = 5;
|
| 231 | NG_PON2 = 6;
|
| 232 | EPON = 7;
|
| 233 | }
|
| 234 | FormFactor form_factor = 1;
|
| 235 | Type trans_type = 2;
|
| 236 | // The maximum reach that can be achieved by this transceiver
|
| 237 | uint32 max_distance = 3;
|
| 238 | ValueScale max_distance_scale = 4;
|
| 239 | // The receive and transmit wavelengths that the transeiver operates on
|
| 240 | repeated uint32 rx_wavelength = 5;
|
| 241 | repeated uint32 tx_wavelength = 6;
|
| 242 | ValueScale wavelength_scale = 7;
|
| 243 | }
|
| 244 |
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 245 | message Component {
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame^] | 246 | // The name of a component uniquely identifies a component within the hardware
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 247 | string name = 1;
|
| 248 | ComponentType class = 2;
|
| 249 | string description = 3;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame^] | 250 | // The name of the parent of this component, empty string("") in case of the root component
|
Amit Ghosh | 121f7c2 | 2020-07-21 10:18:38 +0100 | [diff] [blame] | 251 | string parent = 4;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 252 | int32 parent_rel_pos = 5;
|
| 253 | repeated Component children = 6;
|
| 254 | string hardware_rev = 7;
|
| 255 | string firmware_rev = 8;
|
| 256 | string software_rev = 9;
|
| 257 | string serial_num = 10;
|
| 258 | string mfg_name = 11;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame^] | 259 | // Apart from the definition of this attribute as defined in RFC 8348, implementations could choose to carry
|
| 260 | // the manufacturer's part number in this attribute.
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 261 | string model_name = 12;
|
| 262 | string alias = 13;
|
| 263 | string asset_id = 14;
|
| 264 | bool is_fru = 15;
|
| 265 | google.protobuf.Timestamp mfg_date = 16;
|
| 266 | Uri uri = 17;
|
| 267 | // The uuid of the component uniquely identifies the component across the entire system
|
| 268 | Uuid uuid= 18;
|
| 269 | ComponentState state = 19;
|
| 270 | repeated ComponentSensorData sensor_data = 20;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame^] | 271 | // The attribute 'specific' can be populated for components where more details are required by the users of the DMI interface
|
| 272 | oneof specific {
|
| 273 | PortComponentAttributes port_attr = 50;
|
| 274 | ContainerComponentAttributes container_attr = 51;
|
| 275 | PsuComponentAttributes psu_attr = 52;
|
| 276 | TransceiverComponentsAttributes transceiver_attr = 53;
|
| 277 | }
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 278 | }
|
| 279 |
|
| 280 | message Hardware {
|
| 281 | google.protobuf.Timestamp last_change = 1;
|
| 282 | // Each HW has one parent/root and all other components are children of this
|
| 283 | // The class of the root component would be set as UNDEFINED
|
| 284 | Component root = 2;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame^] | 285 | // TODO: Authentication?
|
| 286 | // Timestamp at which the hardware last booted
|
| 287 | google.protobuf.Timestamp last_booted = 3;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 288 | }
|
| 289 |
|
| 290 | // The attributes of a component which are modifiable from the client side
|
| 291 | message ModifiableComponent {
|
| 292 | // The name has to be unique for each component within the hardware and implementations need to
|
| 293 | // ascertain this when modifying the name
|
| 294 | string name = 1;
|
| 295 | ComponentType class = 2;
|
| 296 | Component parent = 3;
|
| 297 | int32 parent_rel_pos = 4;
|
| 298 | string alias = 5;
|
| 299 | string asset_id = 6;
|
| 300 | Uri uri = 7;
|
| 301 | ComponentAdminState admin_state = 8;
|
| 302 | }
|