| syntax = "proto3"; | |
| option go_package = "github.com/opencord/device-management-interface/v3/go/dmi"; | |
| package dmi; | |
| import "google/protobuf/timestamp.proto"; | |
| // The model used to represent a HW is based on RFC8348 (https://tools.ietf.org/html/rfc8348) | |
| message Uuid { | |
| string uuid = 1; | |
| } | |
| message HardwareID { | |
| Uuid uuid = 1; | |
| } | |
| message Uri { | |
| string uri = 1; | |
| } | |
| enum ComponentType { | |
| COMPONENT_TYPE_UNDEFINED = 0; | |
| COMPONENT_TYPE_UNKNOWN = 1; | |
| COMPONENT_TYPE_CHASSIS = 2; | |
| COMPONENT_TYPE_BACKPLANE = 3; | |
| COMPONENT_TYPE_CONTAINER = 4; | |
| COMPONENT_TYPE_POWER_SUPPLY = 5; | |
| COMPONENT_TYPE_FAN = 6; | |
| COMPONENT_TYPE_SENSOR = 7; | |
| COMPONENT_TYPE_MODULE = 8; | |
| COMPONENT_TYPE_PORT = 9; | |
| COMPONENT_TYPE_CPU = 10; | |
| COMPONENT_TYPE_BATTERY = 11; | |
| COMPONENT_TYPE_STORAGE = 12; | |
| COMPONENT_TYPE_MEMORY = 13; | |
| // A component of type "TRANSCEIVER" could have 0 or more components of type "PORT" as children. | |
| COMPONENT_TYPE_TRANSCEIVER = 14; | |
| } | |
| enum ComponentAdminState { | |
| COMP_ADMIN_STATE_UNDEFINED = 0; | |
| COMP_ADMIN_STATE_UNKNOWN = 1; | |
| COMP_ADMIN_STATE_LOCKED = 2; | |
| COMP_ADMIN_STATE_SHUTTING_DOWN = 3; | |
| COMP_ADMIN_STATE_UNLOCKED = 4; | |
| // Indicates that the component is in a prohibited administrative state, meaning operations are not allowed. | |
| // Typically used to enforce security or policy restrictions. | |
| COMP_ADMIN_STATE_ISOLATED = 6; | |
| // Indicates that the component is administratively isolated from the rest of the system. | |
| // Used when a component must be separated for maintenance, troubleshooting, or security reasons. | |
| COMP_ADMIN_STATE_PROHIBITED = 5; | |
| } | |
| enum ComponentOperState { | |
| COMP_OPER_STATE_UNDEFINED = 0; | |
| COMP_OPER_STATE_UNKNOWN = 1; | |
| COMP_OPER_STATE_DISABLED = 2; | |
| COMP_OPER_STATE_ENABLED = 3; | |
| COMP_OPER_STATE_TESTING = 4; | |
| // Indicates that the component is operating normally. | |
| COMP_OPER_STATE_NORMAL = 5; | |
| // Indicates that the component is currently being configured. | |
| COMP_OPER_STATE_CONFIGURING = 6; | |
| // Indicates that the component is automatically loading configuration or software. | |
| COMP_OPER_STATE_AUTOMATIC_LOADING = 7; | |
| // Indicates that the component has encountered a failure. | |
| COMP_OPER_STATE_FAILED = 8; | |
| // Indicates that the component is temporarily shut down. | |
| // The component is in a high temperature shutdown state due to exceeding safe operating temperature limits. | |
| COMP_OPER_STATE_HIGH_TEMP_SHUTDOWN= 9; | |
| // Indicates that the component is manually shut down. | |
| COMP_OPER_STATE_MANUAL_SHUTDOWN = 10; | |
| // Indicates that the component is shut down to save power. | |
| COMP_OPER_STATE_POWER_SAVING_SHUTDOWN = 11; | |
| // Indicates that the component's type does not match the expected type. | |
| COMP_OPER_STATE_TYPE_MISMATCH = 12; | |
| } | |
| enum ComponentUsageState { | |
| COMP_USAGE_STATE_UNDEFINED = 0; | |
| COMP_USAGE_STATE_UNKNOWN = 1; | |
| COMP_USAGE_STATE_IDLE = 2; | |
| COMP_USAGE_STATE_ACTIVE = 3; | |
| COMP_USAGE_STATE_BUSY = 4; | |
| } | |
| enum ComponentAlarmState { | |
| COMP_ALARM_STATE_UNDEFINED = 0; | |
| COMP_ALARM_STATE_UNKNOWN = 1; | |
| COMP_ALARM_STATE_UNDER_REPAIR= 2; | |
| COMP_ALARM_STATE_CRITICAL = 3; | |
| COMP_ALARM_STATE_MAJOR = 4; | |
| COMP_ALARM_STATE_MINOR = 5; | |
| COMP_ALARM_STATE_WARNING = 6; | |
| COMP_ALARM_STATE_INDETERMINATE = 7; | |
| } | |
| enum ComponentStandbyState { | |
| COMP_STANDBY_STATE_UNDEFINED = 0; | |
| COMP_STANDBY_STATE_UNKNOWN = 1; | |
| COMP_STANDBY_STATE_HOT = 2; | |
| COMP_STANDBY_STATE_COLD = 3; | |
| COMP_STANDBY_STATE_PROVIDING_SERVICE = 4; | |
| } | |
| message ComponentState { | |
| google.protobuf.Timestamp state_last_changed = 1; | |
| ComponentAdminState admin_state = 2; | |
| ComponentOperState oper_state = 3; | |
| ComponentUsageState usage_state = 4; | |
| ComponentAlarmState alarm_state = 5; | |
| ComponentStandbyState standby_state = 6; | |
| } | |
| enum DataValueType { | |
| VALUE_TYPE_UNDEFINED = 0; | |
| VALUE_TYPE_OTHER = 1; | |
| VALUE_TYPE_UNKNOWN = 2; | |
| VALUE_TYPE_VOLTS_AC = 3; | |
| VALUE_TYPE_VOLTS_DC = 4; | |
| VALUE_TYPE_AMPERES = 5; | |
| VALUE_TYPE_WATTS = 6; | |
| VALUE_TYPE_HERTZ = 7; | |
| VALUE_TYPE_CELSIUS = 8; | |
| VALUE_TYPE_PERCENT_RH = 9; | |
| VALUE_TYPE_RPM = 10; | |
| VALUE_TYPE_CMM = 11; | |
| VALUE_TYPE_TRUTH_VALUE = 12; | |
| VALUE_TYPE_PERCENT = 13; | |
| VALUE_TYPE_METERS = 14; | |
| VALUE_TYPE_BYTES = 15; | |
| VALUE_TYPE_DBM = 16; | |
| } | |
| enum ValueScale { | |
| VALUE_SCALE_UNDEFINED = 0; | |
| VALUE_SCALE_YOCTO = 1; | |
| VALUE_SCALE_ZEPTO = 2; | |
| VALUE_SCALE_ATTO = 3; | |
| VALUE_SCALE_FEMTO = 4; | |
| VALUE_SCALE_PICO = 5; | |
| VALUE_SCALE_NANO = 6; | |
| VALUE_SCALE_MICRO = 7; | |
| VALUE_SCALE_MILLI = 8; | |
| VALUE_SCALE_UNITS = 9; | |
| VALUE_SCALE_KILO = 10; | |
| VALUE_SCALE_MEGA = 11; | |
| VALUE_SCALE_GIGA = 12; | |
| VALUE_SCALE_TERA = 13; | |
| VALUE_SCALE_PETA = 14; | |
| VALUE_SCALE_EXA = 15; | |
| VALUE_SCALE_ZETTA = 16; | |
| VALUE_SCALE_YOTTA =17; | |
| } | |
| enum SensorStatus { | |
| SENSOR_STATUS_UNDEFINED = 0; | |
| SENSOR_STATUS_OK = 1; | |
| SENSOR_STATUS_UNAVAILABLE = 2; | |
| SENSOR_STATUS_NONOPERATIONAL = 3; | |
| } | |
| enum TransceiverType { | |
| TYPE_UNDEFINED = 0; | |
| ETHERNET = 1; | |
| GPON = 2; | |
| XGPON = 3; | |
| XGSPON = 4; | |
| CPON = 5; | |
| NG_PON2 = 6; | |
| EPON = 7; | |
| COMBO_GPON_XGSPON = 8; | |
| // Add more here | |
| TYPE_NOT_DETECTED = 255; | |
| } | |
| message ComponentSensorData { | |
| int32 value = 1; | |
| DataValueType type = 2; | |
| ValueScale scale = 3; | |
| int32 precision = 4; | |
| SensorStatus status = 5; | |
| string units_display = 6; | |
| google.protobuf.Timestamp timestamp = 7; | |
| uint32 value_update_rate = 8; | |
| // data_type can be of the string representation of MetricNames or something else as well | |
| string data_type = 9; | |
| } | |
| message PortComponentAttributes{ | |
| enum ConnectorType { | |
| CONNECTOR_TYPE_UNDEFINED = 0; | |
| RJ45 = 1; | |
| FIBER_LC = 2; | |
| FIBER_SC_PC = 3; | |
| FIBER_MPO = 4; | |
| RS232 = 5; | |
| } | |
| enum Speed { | |
| SPEED_UNDEFINED = 0; | |
| DYNAMIC = 1; | |
| GIGABIT_1 = 2; | |
| GIGABIT_10 = 3; | |
| GIGABIT_25 = 4; | |
| GIGABIT_40 = 5; | |
| GIGABIT_100 = 6; | |
| GIGABIT_400 = 7; | |
| MEGABIT_2500 = 8; | |
| MEGABIT_1250 = 9; | |
| } | |
| enum Protocol { | |
| PROTOCOL_UNDEFINED = 0; | |
| ETHERNET = 1; | |
| GPON = 2; | |
| XGPON = 3; | |
| XGSPON = 4; | |
| GFAST = 5; | |
| SERIAL = 6; | |
| EPON = 7; | |
| BITS = 8; | |
| } | |
| ConnectorType connector_type = 1; | |
| Speed speed = 2; | |
| Protocol protocol = 3; | |
| string physical_label = 4; | |
| // The mapping_label can be used to map ports between the DMI interface and other systems like VOLTHA | |
| // The value of the mapping_label should be exactly the same as generated for the same port by the other | |
| // system | |
| string mapping_label = 5; | |
| PonIdConfig pon_id_config = 6; | |
| bool speed_autonegotiation = 7; //Only valid for ethernet type port components. True if enabled, false otherwise. | |
| PonDistance distance = 8; //Pon max distance and max differential reach distance. | |
| } | |
| message PonDistance { | |
| /* | |
| * The ITU-T G.987.x series of Recommendations addresses the linear extent parameters of XG-PON | |
| * using the single concept of fibre distance. An ONU is characterized by its fibre distance, and for | |
| * each pair of ONUs on the same OLT PON interface, the differential fibre distance is the difference | |
| * between the two individual fibre distances. Each specific PMD layer parameter set contains a | |
| * provision to support a specific maximum fibre distance. The XG-PON TC layer specification | |
| * contains a provision to support specific ranges of maximum fibre distance and maximum | |
| * differential fibre distance. These ranges can be configurable for a given system. One can expect that | |
| * for each XG-PON deployment, the configured TC layer maximum fibre distance will match the | |
| * maximum fibre distance supported by the selected PMD layer parameter set. | |
| */ | |
| uint32 max_distance = 1; //Distance in kilometers the maximum logical distance on an ONU on the PON | |
| uint32 max_differential_distance = 2; // maximum distance between the closest ONU to the farthest ONU in km. | |
| } | |
| message PortComponentChangeAttributes { | |
| PonIdConfig pon_id_config = 1; | |
| PonDistance distance = 2; //Pon max distance and max differential reach distance. | |
| } | |
| message TransceiverComponentChangeAttributes { | |
| TransceiverType trans_type = 1; | |
| } | |
| message PonIdConfig { | |
| // The pon_id and pon_id_transmit_periodicity attributes are valid only for ports of type GPON, XGPON and XGSPON | |
| // For GPON pon_id is a 7 byte value | |
| // For XGS-PON, it's a 32 bit value, should be encoded in the first 4 bytes of pon_id in network byte order | |
| bytes pon_id = 1; | |
| uint32 pon_id_transmit_periodicity = 2; // The value is in seconds and defaults to 1 second | |
| } | |
| message ContainerComponentAttributes{ | |
| string physical_label = 1; | |
| } | |
| message PsuComponentAttributes{ | |
| enum SupportedVoltage { | |
| SUPPORTED_VOLTAGE_UNDEFINED = 0; | |
| V48 = 1; | |
| V230 = 2; | |
| V115 = 3; | |
| } | |
| SupportedVoltage supported_voltage = 1; | |
| } | |
| message TransceiverComponentsAttributes{ | |
| enum FormFactor { | |
| FORM_FACTOR_UNKNOWN = 0; | |
| QSFP = 1; | |
| QSFP_PLUS = 2; | |
| QSFP28 = 3; | |
| SFP = 4; | |
| SFP_PLUS = 5; | |
| XFP = 6; | |
| CFP4 = 7; | |
| CFP2 = 8; | |
| CPAK = 9; | |
| X2 = 10; | |
| OTHER = 11; | |
| CFP = 12; | |
| CFP2_ACO = 13; | |
| CFP2_DCO = 14; | |
| QSFP_DD = 15; | |
| } | |
| FormFactor form_factor = 1; | |
| TransceiverType trans_type = 2; | |
| // The maximum reach that can be achieved by this transceiver | |
| uint32 max_distance = 3; | |
| ValueScale max_distance_scale = 4; | |
| // The receive and transmit wavelengths that the transeiver operates on | |
| repeated uint32 rx_wavelength = 5; | |
| repeated uint32 tx_wavelength = 6; | |
| ValueScale wavelength_scale = 7; | |
| // The tx powers on the transceiver; the value type of tx_power should be dBm. | |
| // Note: When there are multiple rx/tx wavelengths and powers | |
| // each of the corresponding ones should be aligned on the same index of the array | |
| repeated int32 tx_power = 8; | |
| ValueScale tx_power_scale = 9; | |
| } | |
| message Component { | |
| // The name of a component uniquely identifies a component within the hardware | |
| string name = 1; | |
| ComponentType class = 2; | |
| string description = 3; | |
| // The name of the parent of this component, empty string("") in case of the root component | |
| string parent = 4; | |
| int32 parent_rel_pos = 5; | |
| repeated Component children = 6; | |
| string hardware_rev = 7; | |
| string firmware_rev = 8; | |
| string software_rev = 9; | |
| string serial_num = 10; | |
| string mfg_name = 11; | |
| // Apart from the definition of this attribute as defined in RFC 8348, implementations could choose to carry | |
| // the manufacturer's part number in this attribute. | |
| string model_name = 12; | |
| string alias = 13; | |
| string asset_id = 14; | |
| bool is_fru = 15; | |
| google.protobuf.Timestamp mfg_date = 16; | |
| Uri uri = 17; | |
| // The uuid of the component uniquely identifies the component across the entire system | |
| Uuid uuid= 18; | |
| ComponentState state = 19; | |
| repeated ComponentSensorData sensor_data = 20; | |
| // The attribute 'specific' can be populated for components where more details are required by the users of the DMI interface | |
| oneof specific { | |
| PortComponentAttributes port_attr = 50; | |
| ContainerComponentAttributes container_attr = 51; | |
| PsuComponentAttributes psu_attr = 52; | |
| TransceiverComponentsAttributes transceiver_attr = 53; | |
| } | |
| } | |
| message Hardware { | |
| google.protobuf.Timestamp last_change = 1; | |
| // Each HW has one parent/root and all other components are children of this | |
| // The class of the root component would be set as UNDEFINED | |
| Component root = 2; | |
| // TODO: Authentication? | |
| // Timestamp at which the hardware last booted | |
| google.protobuf.Timestamp last_booted = 3; | |
| } | |
| // The attributes of a component which are modifiable from the client side | |
| message ModifiableComponent { | |
| // The name has to be unique for each component within the hardware and implementations need to | |
| // ascertain this when modifying the name | |
| string name = 1; | |
| ComponentType class = 2; | |
| Component parent = 3; | |
| int32 parent_rel_pos = 4; | |
| string alias = 5; | |
| string asset_id = 6; | |
| Uri uri = 7; | |
| ComponentAdminState admin_state = 8; | |
| // The attribute 'specific' can be populated for specific class of components | |
| oneof specific { | |
| PortComponentChangeAttributes port_attr = 50; | |
| TransceiverComponentChangeAttributes trx_attr = 51; | |
| } | |
| } |