class CurrentSensorElementInfo(Buffer): byte_size = 3 crit_over = be_int_field(where=bytes_ref[0].bits[1]) warn_over = be_int_field(where=bytes_ref[0].bits[3]) fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) current = be_int_field(where=bytes_ref[1:])
class ConfigurationDiagnosticPage(Buffer): def _calc_num_type_descriptor_headers(self): return sum(desc.type_descriptor_headers_num for desc in self.enclosure_descriptor_list) def _unpack_type_descriptor_text(self, buffer, index, **kwargs): l = self.type_descriptor_header_list[index].type_descriptor_text_length return buffer[0:l].to_bytes(), l page_code = be_int_field(where=bytes_ref[0]) secondary_subenclosures_num = be_int_field(where=bytes_ref[1]) page_length = be_int_field(where=bytes_ref[2:4], set_before_pack=total_size - 4) generation_code = be_int_field(where=bytes_ref[4:8]) enclosure_descriptor_list = list_field(type=EnclosureDescriptor, where=bytes_ref[8:], n=secondary_subenclosures_num + 1) type_descriptor_header_list = list_field(where=bytes_ref[after_ref(enclosure_descriptor_list):], type=TypeDescriptorHeader, n=member_func_ref(_calc_num_type_descriptor_headers)) type_descriptor_text_list = list_field(where=bytes_ref[after_ref(type_descriptor_header_list):], type=str_type, unpack_selector=_unpack_type_descriptor_text, n=member_func_ref(_calc_num_type_descriptor_headers)) def _calc_num_type_descriptor_headers(self): return sum(o.type_descriptor_headers_num for o in self.enclosure_descriptor_list)
class EnclosureDescriptor(Buffer): enclosure_services_processes_num = be_int_field(where=bytes_ref[0].bits[0:3]) relative_enclosure_services_process_identifier = be_int_field(where=bytes_ref[0].bits[4:7]) subenclosure_identifier = be_int_field(where=bytes_ref[1]) type_descriptor_headers_num = be_int_field(where=bytes_ref[2]) enclosure_descriptor_length = be_int_field(where=bytes_ref[3]) enclosure_logical_identifier = bytearray_field(where=bytes_ref[4:12]) # FIXME use NAA stuff enclosure_vendor_identification = str_field(where=bytes_ref[12:20]) product_identification = str_field(where=bytes_ref[20:36]) product_revision_level = str_field(where=bytes_ref[36:40]) # FIXME use INQUIRY stuff vendor_specific_enclosure_information = bytearray_field(where_when_pack=bytes_ref[40:], where_when_unpack=bytes_ref[40:enclosure_descriptor_length + 4])
class AudibleAlarmElementInfo(Buffer): byte_size = 3 fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) tui_unrecov = be_int_field(where=bytes_ref[2].bits[0]) tui_crit = be_int_field(where=bytes_ref[2].bits[1]) tui_non_crit = be_int_field(where=bytes_ref[2].bits[2]) tui_info = be_int_field(where=bytes_ref[2].bits[3]) remind = be_int_field(where=bytes_ref[2].bits[4]) muted = be_int_field(where=bytes_ref[2].bits[6]) rqst_mute = be_int_field(where=bytes_ref[2].bits[7])
class ElementDescriptorDiagnosticPagesData(DiagnosticDataBuffer): def _unpack_status_descriptor(self, buffer, index, **kwargs): descriptor = ElementDescriptor() bytes = descriptor.unpack(buffer, self.conf_page.type_descriptor_header_list[index]) return descriptor, bytes def _possible_elements_num(self): return len(self.conf_page.type_descriptor_header_list) page_code = be_int_field(where=bytes_ref[0]) page_length = be_int_field(where=bytes_ref[2:4]) generation_code = be_int_field(where=bytes_ref[4:8]) element_descriptors = list_field(where=bytes_ref[8:], type=ElementDescriptor, unpack_selector=_unpack_status_descriptor, n=member_func_ref(_possible_elements_num))
class AtaInformationVPDPageBuffer(Buffer): byte_size = 572 peripheral_device = buffer_field(where=bytes_ref[0:], type=PeripheralDeviceDataBuffer) page_code = be_int_field(where=bytes_ref[1:2]) page_length = be_int_field(where=bytes_ref[2:4]) sat_vendor_identification = str_field(where=bytes_ref[8:16]) # bytes 8-15 sat_product_identification = str_field( where=bytes_ref[16:32]) # bytes 16-31 sat_product_revision_level = str_field( where=bytes_ref[32:36]) # bytes 32-35 device_signature = buffer_field(where=bytes_ref[36:56], type=DeviceSignature) # bytes 36-55 command_code = be_int_field(where=bytes_ref[56:57]) # ATA IDENTIFY DEVICE: bytes 60-571 identify_device = buffer_field(where=bytes_ref[60:572], type=AtaIdentifyDevice)
class ReceiveDiagnosticResultCommand(CDBBuffer): opcode = be_int_field(where=bytes_ref[0], set_before_pack=CDB_RECEIVE_DIAGNOSTIC_RESULTS) pcv = be_int_field(where=bytes_ref[1].bits[0]) page_code = be_uint_field(where=bytes_ref[2]) allocation_length = be_int_field(where=bytes_ref[3:5], sign='unsigned') control = buffer_field(type=ControlBuffer, where=bytes_ref[5], set_before_pack=DEFAULT_CONTROL_BUFFER) def __init__(self, result_class, conf_page, *args, **kwargs): super(ReceiveDiagnosticResultCommand, self).__init__(*args, **kwargs) self.result_class = result_class self.conf_page = conf_page def execute(self, executer): datagram = self.create_datagram() result_datagram = yield executer.call(SCSIReadCommand(bytes(datagram), self.allocation_length)) result = self.result_class(conf_page=self.conf_page) result.unpack(result_datagram) yield result
class TempSensorElementInfo(Buffer): byte_size = 3 fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) temperature = be_int_field(where=bytes_ref[1]) ut_warn = be_int_field(where=bytes_ref[2].bits[0]) ut_fail = be_int_field(where=bytes_ref[2].bits[1]) ot_warn = be_int_field(where=bytes_ref[2].bits[2]) ot_fail = be_int_field(where=bytes_ref[2].bits[3])
class EnclosureElementInfo(Buffer): byte_size = 3 ident = be_int_field(where=bytes_ref[0].bits[7]) warn_indication = be_int_field(where=bytes_ref[1].bits[0]) failure_indication = be_int_field(where=bytes_ref[1].bits[1]) time_until_power_cycle = be_int_field(where=bytes_ref[1].bits[2:8]) warn_requested = be_int_field(where=bytes_ref[1].bits[0]) failure_requested = be_int_field(where=bytes_ref[1].bits[1]) requested_power_off_duration = be_int_field(where=bytes_ref[1].bits[2:8])
class VoltageSensorElementInfo(Buffer): byte_size = 3 crit_under = be_int_field(where=bytes_ref[0].bits[0]) crit_over = be_int_field(where=bytes_ref[0].bits[1]) warn_under = be_int_field(where=bytes_ref[0].bits[2]) warn_over = be_int_field(where=bytes_ref[0].bits[3]) fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) voltage = be_int_field(where=bytes_ref[1:])
class CoolingElementInfo(Buffer): byte_size = 3 # for real fan speed the fan speed value should be multiplied by a factor of 10 fan_speed = be_int_field(where=(bytes_ref[0].bits[0:3] + bytes_ref[1])) ident = be_int_field(where=bytes_ref[0].bits[7]) speed_code = be_int_field(where=bytes_ref[2].bits[0:3]) off = be_int_field(where=bytes_ref[2].bits[4]) reqstd_on = be_int_field(where=bytes_ref[2].bits[5]) fail = be_int_field(where=bytes_ref[2].bits[6]) hot_swap = be_int_field(where=bytes_ref[2].bits[7])
class DeviceSignature(Buffer): byte_size = 20 transport_id = be_int_field(where=bytes_ref[0]) pm_port = be_int_field(where=bytes_ref[1].bits[0:4]) interrupt = be_int_field(where=bytes_ref[1].bits[6]) status = be_int_field(where=bytes_ref[2]) error = be_int_field(where=bytes_ref[3]) lba = str_field(where=(bytes_ref[4] + bytes_ref[5] + bytes_ref[6] + bytes_ref[8] + bytes_ref[9] + bytes_ref[10])) device = be_int_field(where=bytes_ref[7]) sector_count = be_int_field(where=bytes_ref[12:14])
class ScsiPortTransceiverElementInfo(Buffer): byte_size = 3 fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) report = be_int_field(where=bytes_ref[1].bits[0]) xmit_fail = be_int_field(where=bytes_ref[2].bits[0]) lol = be_int_field(where=bytes_ref[2].bits[1]) disabled = be_int_field(where=bytes_ref[2].bits[4])
class EnclosureStatusDiagnosticPagesData(DiagnosticDataBuffer): def _unpack_status_descriptor(self, buffer, index, **kwargs): descriptor = StatusDescriptor() bytes = descriptor.unpack( buffer, self.conf_page.type_descriptor_header_list[index]) return descriptor, bytes def _possible_elements_num(self): return len(self.conf_page.type_descriptor_header_list) page_code = be_int_field(where=bytes_ref[0]) unrecov = be_int_field(where=bytes_ref[1].bits[0]) crit = be_int_field(where=bytes_ref[1].bits[1]) non_crit = be_int_field(where=bytes_ref[1].bits[2]) info = be_int_field(where=bytes_ref[1].bits[3]) invop = be_int_field(where=bytes_ref[1].bits[4]) page_length = be_int_field(where=bytes_ref[2:4]) generation_code = be_int_field(where=bytes_ref[4:8]) status_descriptors = list_field(where=bytes_ref[8:], type=StatusDescriptor, unpack_selector=_unpack_status_descriptor, n=member_func_ref(_possible_elements_num))
class ArrayDeviceSlotElementInfo(Buffer): byte_size = 3 rr_abort = be_int_field(where=bytes_ref[0].bits[0]) rebuild_remap = be_int_field(where=bytes_ref[0].bits[1]) in_failed_array = be_int_field(where=bytes_ref[0].bits[2]) in_crit_array = be_int_field(where=bytes_ref[0].bits[3]) cons_chk = be_int_field(where=bytes_ref[0].bits[4]) hot_spare = be_int_field(where=bytes_ref[0].bits[5]) rsvd_device = be_int_field(where=bytes_ref[0].bits[6]) ok = be_int_field(where=bytes_ref[0].bits[7]) report = be_int_field(where=bytes_ref[1].bits[0]) ident = be_int_field(where=bytes_ref[1].bits[1]) rmv = be_int_field(where=bytes_ref[1].bits[2]) ready_insert = be_int_field(where=bytes_ref[1].bits[3]) encl_bypassed_b = be_int_field(where=bytes_ref[1].bits[4]) encl_bypassed_a = be_int_field(where=bytes_ref[1].bits[5]) do_not_remove = be_int_field(where=bytes_ref[1].bits[6]) app_client_bypassed_a = be_int_field(where=bytes_ref[1].bits[7]) device_bypassed_b = be_int_field(where=bytes_ref[2].bits[0]) device_bypassed_a = be_int_field(where=bytes_ref[2].bits[1]) bypassed_b = be_int_field(where=bytes_ref[2].bits[2]) bypassed_a = be_int_field(where=bytes_ref[2].bits[3]) device_off = be_int_field(where=bytes_ref[2].bits[4]) fault_reqstd = be_int_field(where=bytes_ref[2].bits[5]) fault_sensed = be_int_field(where=bytes_ref[2].bits[6]) app_client_bypassed_b = be_int_field(where=bytes_ref[2].bits[7])
class SasConnectorElementInfo(Buffer): byte_size = 3 connector_type = be_int_field(where=bytes_ref[0].bits[0:7]) ident = be_int_field(where=bytes_ref[0].bits[7]) connector_phys_link = be_int_field(where=bytes_ref[1]) fail = be_int_field(where=bytes_ref[2].bits[6])
class SasExpanderElementInfo(Buffer): byte_size = 3 fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7])
class SimpleSubenclosureElementInfo(Buffer): byte_size = 3 fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) short_enclosure_status = be_int_field(where=bytes_ref[2])
class ScsiInitiatorPortElementInfo(Buffer): byte_size = 3 fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) report = be_int_field(where=bytes_ref[1].bits[0]) enabled = be_int_field(where=bytes_ref[2].bits[0])
class InvalidOpReasonElementInfo(Buffer): byte_size = 3 invop_type = be_int_field(where=bytes_ref[0].bits[6:8]) invop_bytes = be_int_field(where=bytes_ref[1:])
class PowerSupplyElementInfo(Buffer): byte_size = 3 ident = be_int_field(where=bytes_ref[0].bits[7]) dc_over_current = be_int_field(where=bytes_ref[1].bits[1]) dc_under_voltage = be_int_field(where=bytes_ref[1].bits[2]) dc_over_voltage = be_int_field(where=bytes_ref[1].bits[3]) dc_fail = be_int_field(where=bytes_ref[2].bits[0]) ac_fail = be_int_field(where=bytes_ref[2].bits[1]) temp_warn = be_int_field(where=bytes_ref[2].bits[2]) overtmp_fail = be_int_field(where=bytes_ref[2].bits[3]) off = be_int_field(where=bytes_ref[2].bits[4]) reqstd_on = be_int_field(where=bytes_ref[2].bits[5]) fail = be_int_field(where=bytes_ref[2].bits[6]) hot_swap = be_int_field(where=bytes_ref[2].bits[7])
class CommunicationPortElementInfo(Buffer): byte_size = 3 fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) disabled = be_int_field(where=bytes_ref[2].bits[0])
class LanguageElementInfo(Buffer): byte_size = 3 ident = be_int_field(where=bytes_ref[0].bits[7]) language_code = be_int_field(where=bytes_ref[1:])
class DisplayElementInfo(Buffer): byte_size = 3 display_mode_status = be_int_field(where=bytes_ref[0].bits[0:2]) fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) display_char_status = be_int_field(where=bytes_ref[1:])
class UninterruptiblePowerSupplyElementInfo(Buffer): byte_size = 3 battery_status = be_int_field(where=bytes_ref[0]) intf_fail = be_int_field(where=bytes_ref[1].bits[0]) warn = be_int_field(where=bytes_ref[1].bits[1]) ups_fail = be_int_field(where=bytes_ref[1].bits[2]) dc_fail = be_int_field(where=bytes_ref[1].bits[3]) ac_fail = be_int_field(where=bytes_ref[1].bits[4]) ac_qual = be_int_field(where=bytes_ref[1].bits[5]) ac_hi = be_int_field(where=bytes_ref[1].bits[6]) ac_low = be_int_field(where=bytes_ref[1].bits[7]) bpf = be_int_field(where=bytes_ref[2].bits[0]) batt_fail = be_int_field(where=bytes_ref[2].bits[1]) fail = be_int_field(where=bytes_ref[2].bits[6]) ident = be_int_field(where=bytes_ref[2].bits[7])
class BaseStatusElement(Buffer): byte_size = 4 element_status_code = be_int_field(where=bytes_ref[0].bits[0:4]) swap = be_int_field(where=bytes_ref[0].bits[4]) disabled = be_int_field(where=bytes_ref[0].bits[5]) prdfail = be_int_field(where=bytes_ref[0].bits[6])
class SccControllerElementInfo(Buffer): byte_size = 3 fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) report = be_int_field(where=bytes_ref[1].bits[0])
class DoorElementInfo(Buffer): byte_size = 3 fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) unlocked = be_int_field(where=bytes_ref[2].bits[0]) door_open = be_int_field(where=bytes_ref[2].bits[1])
class EnclosureServiceControllerElementInfo(Buffer): byte_size = 3 fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) report = be_int_field(where=bytes_ref[1].bits[0]) hot_swap = be_int_field(where=bytes_ref[2].bits[7])
class NonVolotileCacheElementInfo(Buffer): byte_size = 3 size_mult = be_int_field(where=bytes_ref[0].bits[0:2]) fail = be_int_field(where=bytes_ref[0].bits[6]) ident = be_int_field(where=bytes_ref[0].bits[7]) cache_size = be_int_field(where=bytes_ref[1:])