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;
|
| 39 | }
|
| 40 |
|
| 41 | enum ComponentAdminState {
|
| 42 | COMP_ADMIN_STATE_UNDEFINED = 0;
|
| 43 | COMP_ADMIN_STATE_UNKNOWN = 1;
|
| 44 | COMP_ADMIN_STATE_LOCKED = 2;
|
| 45 | COMP_ADMIN_STATE_SHUTTING_DOWN = 3;
|
| 46 | COMP_ADMIN_STATE_UNLOCKED = 4;
|
| 47 | }
|
| 48 |
|
| 49 | enum ComponentOperState {
|
| 50 | COMP_OPER_STATE_UNDEFINED = 0;
|
| 51 | COMP_OPER_STATE_UNKNOWN = 1;
|
| 52 | COMP_OPER_STATE_DISABLED = 2;
|
| 53 | COMP_OPER_STATE_ENABLED = 3;
|
| 54 | COMP_OPER_STATE_TESTING = 4;
|
| 55 | }
|
| 56 |
|
| 57 | enum ComponentUsageState {
|
| 58 | COMP_USAGE_STATE_UNDEFINED = 0;
|
| 59 | COMP_USAGE_STATE_UNKNOWN = 1;
|
| 60 | COMP_USAGE_STATE_IDLE = 2;
|
| 61 | COMP_USAGE_STATE_ACTIVE = 3;
|
| 62 | COMP_USAGE_STATE_BUSY = 4;
|
| 63 | }
|
| 64 |
|
| 65 | enum ComponentAlarmState {
|
| 66 | COMP_ALARM_STATE_UNDEFINED = 0;
|
| 67 | COMP_ALARM_STATE_UNKNOWN = 1;
|
| 68 | COMP_ALARM_STATE_UNDER_REPAIR= 2;
|
| 69 | COMP_ALARM_STATE_CRITICAL = 3;
|
| 70 | COMP_ALARM_STATE_MAJOR = 4;
|
| 71 | COMP_ALARM_STATE_MINOR = 5;
|
| 72 | COMP_ALARM_STATE_WARNING = 6;
|
amit.ghosh | 3a5c7f1 | 2020-12-11 13:56:26 +0100 | [diff] [blame] | 73 | COMP_ALARM_STATE_INDETERMINATE = 7;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 74 | }
|
| 75 |
|
| 76 | enum ComponentStandbyState {
|
| 77 | COMP_STANDBY_STATE_UNDEFINED = 0;
|
| 78 | COMP_STANDBY_STATE_UNKNOWN = 1;
|
| 79 | COMP_STANDBY_STATE_HOT = 2;
|
| 80 | COMP_STANDBY_STATE_COLD = 3;
|
| 81 | COMP_STANDBY_STATE_PROVIDING_SERVICE = 4;
|
| 82 | }
|
| 83 |
|
| 84 | message ComponentState {
|
| 85 | google.protobuf.Timestamp state_last_changed = 1;
|
| 86 | ComponentAdminState admin_state = 2;
|
| 87 | ComponentOperState oper_state = 3;
|
| 88 | ComponentUsageState usage_state = 4;
|
| 89 | ComponentAlarmState alarm_state = 5;
|
| 90 | ComponentStandbyState standby_state = 6;
|
| 91 | }
|
| 92 |
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 93 | enum DataValueType {
|
| 94 | VALUE_TYPE_UNDEFINED = 0;
|
| 95 | VALUE_TYPE_OTHER = 1;
|
| 96 | VALUE_TYPE_UNKNOWN = 2;
|
| 97 | VALUE_TYPE_VOLTS_AC = 3;
|
| 98 | VALUE_TYPE_VOLTS_DC = 4;
|
| 99 | VALUE_TYPE_AMPERES = 5;
|
| 100 | VALUE_TYPE_WATTS = 6;
|
| 101 | VALUE_TYPE_HERTZ = 7;
|
| 102 | VALUE_TYPE_CELSIUS = 8;
|
| 103 | VALUE_TYPE_PERCENT_RH = 9;
|
| 104 | VALUE_TYPE_RPM = 10;
|
| 105 | VALUE_TYPE_CMM = 11;
|
| 106 | VALUE_TYPE_TRUTH_VALUE = 12;
|
amit.ghosh | f54a9a3 | 2021-03-10 16:39:54 +0100 | [diff] [blame] | 107 | VALUE_TYPE_PERCENT = 13;
|
| 108 | VALUE_TYPE_METERS = 14;
|
| 109 | VALUE_TYPE_BYTES = 15;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 110 | }
|
| 111 |
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 112 | enum ValueScale {
|
| 113 | VALUE_SCALE_UNDEFINED = 0;
|
| 114 | VALUE_SCALE_YOCTO = 1;
|
| 115 | VALUE_SCALE_ZEPTO = 2;
|
| 116 | VALUE_SCALE_ATTO = 3;
|
| 117 | VALUE_SCALE_FEMTO = 4;
|
| 118 | VALUE_SCALE_PICO = 5;
|
| 119 | VALUE_SCALE_NANO = 6;
|
| 120 | VALUE_SCALE_MICRO = 7;
|
| 121 | VALUE_SCALE_MILLI = 8;
|
| 122 | VALUE_SCALE_UNITS = 9;
|
| 123 | VALUE_SCALE_KILO = 10;
|
| 124 | VALUE_SCALE_MEGA = 11;
|
| 125 | VALUE_SCALE_GIGA = 12;
|
| 126 | VALUE_SCALE_TERA = 13;
|
| 127 | VALUE_SCALE_PETA = 14;
|
| 128 | VALUE_SCALE_EXA = 15;
|
| 129 | VALUE_SCALE_ZETTA = 16;
|
| 130 | VALUE_SCALE_YOTTA =17;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 131 | }
|
| 132 |
|
| 133 | enum SensorStatus {
|
| 134 | SENSOR_STATUS_UNDEFINED = 0;
|
| 135 | SENSOR_STATUS_OK = 1;
|
| 136 | SENSOR_STATUS_UNAVAILABLE = 2;
|
| 137 | SENSOR_STATUS_NONOPERATIONAL = 3;
|
| 138 | }
|
| 139 |
|
| 140 | message ComponentSensorData {
|
| 141 | int32 value = 1;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 142 | DataValueType type = 2;
|
| 143 | ValueScale scale = 3;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 144 | int32 precision = 4;
|
| 145 | SensorStatus status = 5;
|
| 146 | string units_display = 6;
|
| 147 | google.protobuf.Timestamp timestamp = 7;
|
| 148 | uint32 value_update_rate = 8;
|
| 149 | // data_type can be of the string representation of MetricNames or something else as well
|
| 150 | string data_type = 9;
|
| 151 | }
|
| 152 |
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 153 | message PortComponentAttributes{
|
| 154 | enum ConnectorType {
|
| 155 | CONNECTOR_TYPE_UNDEFINED = 0;
|
| 156 | RJ45 = 1;
|
| 157 | FIBER_LC = 2;
|
| 158 | FIBER_SC_PC = 3;
|
| 159 | FIBER_MPO = 4;
|
amit.ghosh | 6682fef | 2021-03-19 14:53:37 +0100 | [diff] [blame] | 160 | RS232 = 5;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 161 | }
|
| 162 | enum Speed {
|
| 163 | SPEED_UNDEFINED = 0;
|
| 164 | DYNAMIC = 1;
|
| 165 | GIGABIT_1 = 2;
|
| 166 | GIGABIT_10 = 3;
|
| 167 | GIGABIT_25 = 4;
|
| 168 | GIGABIT_40 = 5;
|
| 169 | GIGABIT_100 = 6;
|
| 170 | GIGABIT_400 = 7;
|
| 171 | MEGABIT_2500 = 8;
|
| 172 | MEGABIT_1250 = 9;
|
| 173 | }
|
| 174 | enum Protocol {
|
| 175 | PROTOCOL_UNDEFINED = 0;
|
| 176 | ETHERNET = 1;
|
| 177 | GPON = 2;
|
| 178 | XGPON = 3;
|
| 179 | XGSPON = 4;
|
| 180 | GFAST = 5;
|
| 181 | SERIAL = 6;
|
| 182 | EPON = 7;
|
amit.ghosh | 6682fef | 2021-03-19 14:53:37 +0100 | [diff] [blame] | 183 | BITS = 8;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 184 | }
|
| 185 | ConnectorType connector_type = 1;
|
| 186 | Speed speed = 2;
|
| 187 | Protocol protocol = 3;
|
| 188 | string physical_label = 4;
|
amit.ghosh | 98c5a6c | 2021-08-12 16:19:46 +0200 | [diff] [blame] | 189 | // The mapping_label can be used to map ports between the DMI interface and other systems like VOLTHA
|
| 190 | // The value of the mapping_label should be exactly the same as generated for the same port by the other
|
| 191 | // system
|
| 192 | string mapping_label = 5;
|
| 193 | PonIdConfig pon_id_config = 6;
|
Andrea Campanella | fcd2229 | 2021-08-27 10:45:46 +0200 | [diff] [blame] | 194 | bool speed_autonegotiation = 7; //Only valid for ethernet type port components. True if enabled, false otherwise.
|
amit.ghosh | 98c5a6c | 2021-08-12 16:19:46 +0200 | [diff] [blame] | 195 | }
|
| 196 |
|
| 197 | message PortComponentChangeAttributes {
|
| 198 | PonIdConfig pon_id_config = 1;
|
| 199 | }
|
| 200 |
|
| 201 | message PonIdConfig {
|
| 202 | // The pon_id and pon_id_transmit_periodicity attributes are valid only for ports of type GPON, XGPON and XGSPON
|
| 203 | // For GPON pon_id is a 7 byte value
|
| 204 | // For XGS-PON, it's a 32 bit value, should be encoded in the first 4 bytes of pon_id in network byte order
|
| 205 | bytes pon_id = 1;
|
| 206 | uint32 pon_id_transmit_periodicity = 2; // The value is in seconds and defaults to 1 second
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 207 | }
|
| 208 |
|
| 209 | message ContainerComponentAttributes{
|
| 210 | string physical_label = 1;
|
| 211 | }
|
| 212 |
|
| 213 | message PsuComponentAttributes{
|
| 214 | enum SupportedVoltage {
|
| 215 | SUPPORTED_VOLTAGE_UNDEFINED = 0;
|
| 216 | V48 = 1;
|
| 217 | V230 = 2;
|
| 218 | V115 = 3;
|
| 219 | }
|
| 220 | SupportedVoltage supported_voltage = 1;
|
| 221 | }
|
| 222 |
|
| 223 | message TransceiverComponentsAttributes{
|
| 224 | enum FormFactor {
|
| 225 | FORM_FACTOR_UNKNOWN = 0;
|
| 226 | QSFP = 1;
|
| 227 | QSFP_PLUS = 2;
|
| 228 | QSFP28 = 3;
|
| 229 | SFP = 4;
|
| 230 | SFP_PLUS = 5;
|
| 231 | XFP = 6;
|
| 232 | CFP4 = 7;
|
| 233 | CFP2 = 8;
|
| 234 | CPAK = 9;
|
| 235 | X2 = 10;
|
| 236 | OTHER = 11;
|
| 237 | CFP = 12;
|
| 238 | CFP2_ACO = 13;
|
| 239 | CFP2_DCO = 14;
|
| 240 | }
|
| 241 |
|
| 242 | enum Type {
|
| 243 | TYPE_UNKNOWN = 0;
|
| 244 | ETHERNET = 1;
|
| 245 | GPON = 2;
|
| 246 | XGPON = 3;
|
| 247 | XGSPON = 4;
|
| 248 | CPON = 5;
|
| 249 | NG_PON2 = 6;
|
| 250 | EPON = 7;
|
| 251 | }
|
| 252 | FormFactor form_factor = 1;
|
| 253 | Type trans_type = 2;
|
| 254 | // The maximum reach that can be achieved by this transceiver
|
| 255 | uint32 max_distance = 3;
|
| 256 | ValueScale max_distance_scale = 4;
|
| 257 | // The receive and transmit wavelengths that the transeiver operates on
|
| 258 | repeated uint32 rx_wavelength = 5;
|
| 259 | repeated uint32 tx_wavelength = 6;
|
| 260 | ValueScale wavelength_scale = 7;
|
| 261 | }
|
| 262 |
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 263 | message Component {
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 264 | // The name of a component uniquely identifies a component within the hardware
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 265 | string name = 1;
|
| 266 | ComponentType class = 2;
|
| 267 | string description = 3;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 268 | // 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] | 269 | string parent = 4;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 270 | int32 parent_rel_pos = 5;
|
| 271 | repeated Component children = 6;
|
| 272 | string hardware_rev = 7;
|
| 273 | string firmware_rev = 8;
|
| 274 | string software_rev = 9;
|
| 275 | string serial_num = 10;
|
| 276 | string mfg_name = 11;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 277 | // Apart from the definition of this attribute as defined in RFC 8348, implementations could choose to carry
|
| 278 | // the manufacturer's part number in this attribute.
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 279 | string model_name = 12;
|
| 280 | string alias = 13;
|
| 281 | string asset_id = 14;
|
| 282 | bool is_fru = 15;
|
| 283 | google.protobuf.Timestamp mfg_date = 16;
|
| 284 | Uri uri = 17;
|
| 285 | // The uuid of the component uniquely identifies the component across the entire system
|
| 286 | Uuid uuid= 18;
|
| 287 | ComponentState state = 19;
|
| 288 | repeated ComponentSensorData sensor_data = 20;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 289 | // The attribute 'specific' can be populated for components where more details are required by the users of the DMI interface
|
| 290 | oneof specific {
|
| 291 | PortComponentAttributes port_attr = 50;
|
| 292 | ContainerComponentAttributes container_attr = 51;
|
| 293 | PsuComponentAttributes psu_attr = 52;
|
| 294 | TransceiverComponentsAttributes transceiver_attr = 53;
|
| 295 | }
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 296 | }
|
| 297 |
|
| 298 | message Hardware {
|
| 299 | google.protobuf.Timestamp last_change = 1;
|
| 300 | // Each HW has one parent/root and all other components are children of this
|
| 301 | // The class of the root component would be set as UNDEFINED
|
| 302 | Component root = 2;
|
amit.ghosh | 2a6b60b | 2021-02-03 15:16:02 +0100 | [diff] [blame] | 303 | // TODO: Authentication?
|
| 304 | // Timestamp at which the hardware last booted
|
| 305 | google.protobuf.Timestamp last_booted = 3;
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 306 | }
|
| 307 |
|
| 308 | // The attributes of a component which are modifiable from the client side
|
| 309 | message ModifiableComponent {
|
| 310 | // The name has to be unique for each component within the hardware and implementations need to
|
| 311 | // ascertain this when modifying the name
|
| 312 | string name = 1;
|
| 313 | ComponentType class = 2;
|
| 314 | Component parent = 3;
|
| 315 | int32 parent_rel_pos = 4;
|
| 316 | string alias = 5;
|
| 317 | string asset_id = 6;
|
| 318 | Uri uri = 7;
|
| 319 | ComponentAdminState admin_state = 8;
|
amit.ghosh | 98c5a6c | 2021-08-12 16:19:46 +0200 | [diff] [blame] | 320 | // The attribute 'specific' can be populated for specific class of components
|
| 321 | oneof specific {
|
| 322 | PortComponentChangeAttributes port_attr = 50;
|
| 323 | }
|
Amit Ghosh | 09f2836 | 2020-06-12 21:52:19 +0100 | [diff] [blame] | 324 | }
|