class NAA_IEEE_Registered_Designator(NAA_Descriptor): ieee_company_id = be_uint_field(where=(bytes_ref[7].bits[4:8] + bytes_ref[6] + bytes_ref[5] + bytes_ref[4].bits[0:4])) vendor_specific_identifier = be_uint_field( where=(bytes_ref[11] + bytes_ref[10] + bytes_ref[9] + bytes_ref[8] + bytes_ref[7].bits[0:4]))
class UnknownVPDPageBuffer(Buffer): peripheral_device = buffer_field(where=bytes_ref[0:], type=PeripheralDeviceDataBuffer) page_code = be_uint_field(where=bytes_ref[1]) page_length = be_uint_field(where=bytes_ref[2:4], set_before_pack=len_ref(self_ref.page_data)) page_data = list_field(where=bytes_ref[4:4 + page_length], type=b_uint8)
class UnitSerialNumberVPDPageBuffer(Buffer): peripheral_device = buffer_field(where=bytes_ref[0:], type=PeripheralDeviceDataBuffer) page_code = be_uint_field(where=bytes_ref[1]) page_length = be_uint_field(where=bytes_ref[3], set_before_pack=len_ref( self_ref.product_serial_number)) product_serial_number = str_field(where=bytes_ref[4:4 + page_length])
class StringInquiryPageBuffer(Buffer): peripheral_device = buffer_field(where=bytes_ref[0:], type=PeripheralDeviceDataBuffer) page_code = be_uint_field(where=bytes_ref[1]) page_length = be_uint_field(where=bytes_ref[2:4], set_before_pack=len_ref(self_ref.string)) string = str_field(where=bytes_ref[4:4 + page_length], unpack_after=page_length)
class SupportedVPDPagesBuffer(Buffer): peripheral_device = buffer_field(where=bytes_ref[0:], type=PeripheralDeviceDataBuffer) page_code = be_uint_field(where=bytes_ref[1]) page_length = be_uint_field(where=bytes_ref[3]) vpd_parameters = list_field(where=bytes_ref[4:], type=b_uint8, n=page_length)
class JSONInquiryPageBuffer(Buffer): def _calc_json_length(self): import json return len(json.dumps(self.json_data)) peripheral_device = buffer_field(where=bytes_ref[0:], type=PeripheralDeviceDataBuffer) page_code = be_uint_field(where=bytes_ref[1]) page_length = be_uint_field(where=bytes_ref[2:4], set_before_pack=self_ref._calc_json_length()) json_data = json_field(where=bytes_ref[4:4 + page_length], unpack_after=page_length)
class VeritasVPDPageBuffer(Buffer): peripheral_device = buffer_field(where=bytes_ref[0:], type=PeripheralDeviceDataBuffer) page_code = be_uint_field(where=bytes_ref[1]) page_length = be_uint_field(where=bytes_ref[2:4]) is_thin_lun = be_uint_field(where=bytes_ref[4].bits[0]) is_snapshot_lun = be_uint_field(where=bytes_ref[4].bits[1]) is_space_optimized_src = be_uint_field(where=bytes_ref[4].bits[2]) is_fcdisk_lun = be_uint_field(where=bytes_ref[4].bits[3]) is_satadisk_lun = be_uint_field(where=bytes_ref[4].bits[4]) is_replication_src = be_uint_field(where=bytes_ref[4].bits[5]) is_replication_dst = be_uint_field(where=bytes_ref[4].bits[6]) raid_type = be_uint_field(where=bytes_ref[5])
class T10VendorIDDesignator(DesignatorDescriptor): designator_length = be_uint_field(where=bytes_ref[3], set_before_pack=len_ref( self_ref.vendor_specific_identifier)) t10_vendor_identification = str_field(where=bytes_ref[4:12]) vendor_specific_identifier = bytearray_field( where=bytes_ref[12:4 + designator_length])
class DesignatorDescriptor(Buffer): code_set = be_uint_field(where=bytes_ref[0].bits[0:4]) protocol_identifier = be_uint_field(where=bytes_ref[0].bits[4:8]) designator_type = be_uint_field(where=bytes_ref[1].bits[0:4]) association = be_uint_field(where=bytes_ref[1].bits[4:6]) piv = be_uint_field(where=bytes_ref[1].bits[7]) reserved = be_uint_field(where=bytes_ref[2]) designator_length = be_uint_field(where=bytes_ref[3])
class LogicalBlockProvisioningVPDPageBuffer(Buffer): peripheral_device = buffer_field(where=bytes_ref[0:], type=PeripheralDeviceDataBuffer) page_code = be_uint_field(where=bytes_ref[1]) page_length = be_uint_field(where=bytes_ref[2:4]) threshold_exponent = be_uint_field(where=bytes_ref[4]) # bit-field dp = be_uint_field(where=bytes_ref[5].bits[0]) anc_sup = be_uint_field(where=bytes_ref[5].bits[1]) lbprz = be_uint_field(where=bytes_ref[5].bits[2]) # reserved lbpws10 = be_uint_field(where=bytes_ref[5].bits[5]) lbpws = be_uint_field(where=bytes_ref[5].bits[6]) lbpu = be_uint_field(where=bytes_ref[5].bits[7]) provisioning_type = be_uint_field(where=bytes_ref[6].bits[0:3]) # reserved provisioning_group_descriptor = buffer_field(where=bytes_ref[8:], type=DesignatorDescriptor, unpack_selector=determine_designator, unpack_if=input_buffer_length>8)
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_uint_field(where=bytes_ref[3]) enclosure_logical_identifier = bytearray_field(where=bytes_ref[4:12]) 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]) vendor_specific_enclosure_information = bytearray_field( where_when_pack=bytes_ref[40:], where_when_unpack=bytes_ref[40:enclosure_descriptor_length + 4])
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 LogicalUnitGroupDesignator(DesignatorDescriptor): logical_unit_group = be_uint_field(where=bytes_ref[6:8])
class TargetPortGroupDesignator(DesignatorDescriptor): target_port_group = be_uint_field(where=bytes_ref[6:8])
class RelativeTargetPortDesignator(DesignatorDescriptor): relative_target_port_identifier = be_uint_field(where=bytes_ref[6:8])
class NAA_IEEE_Registered_Extended_Designator(NAA_IEEE_Registered_Designator): vendor_specific_identifier_extension = be_uint_field( where=bytes_ref[12:20])
class DeviceIdentificationVPDPageBuffer(Buffer): peripheral_device = buffer_field(where=bytes_ref[0:], type=PeripheralDeviceDataBuffer) page_code = be_uint_field(where=bytes_ref[1]) page_length = be_uint_field(where=bytes_ref[2:4]) designators_list = list_field(where=bytes_ref[4:4+page_length], type=DesignatorDescriptor, unpack_selector=determine_designator, unpack_after=page_length)
class NAA_Locally_Assigned_Designator(NAA_Descriptor): locally_administered_value = be_uint_field( where=(bytes_ref[11] + bytes_ref[10] + bytes_ref[9] + bytes_ref[8] + bytes_ref[7] + bytes_ref[6] + bytes_ref[5] + bytes_ref[4].bits[0:4]))
class SCSINameDesignator(DesignatorDescriptor): designator_length = be_uint_field(where=bytes_ref[3], set_before_pack=len_ref( self_ref.scsi_name_string)) scsi_name_string = bytearray_field(where=bytes_ref[4:4 + designator_length])
class MD5LogicalUnitDesignator(DesignatorDescriptor): designator_length = be_uint_field( where=bytes_ref[3], set_before_pack=len_ref(self_ref.md5_logical_unit_identifier)) md5_logical_unit_identifier = bytearray_field( where=bytes_ref[4:4 + designator_length])
class EUI64_12Byte_Designator(EUI64_Designator): directory_id = be_uint_field(where=bytes_ref[12:16])
class EUI64_Designator(DesignatorDescriptor): ieee_company = be_uint_field(where=bytes_ref[4:7]) vendor_specific_extension_identifer = be_uint_field(where=bytes_ref[7:12])
class Reserved_Designator(DesignatorDescriptor): designator_length = be_uint_field(where=bytes_ref[3], set_before_pack=len_ref( self_ref.designator)) desginator = str_field(where=bytes_ref[4:4 + designator_length])
class VendorSpecificDesignator(DesignatorDescriptor): designator_length = be_uint_field(where=bytes_ref[3], set_before_pack=len_ref( self_ref.vendor_specific_identifier)) vendor_specific_identifier = bytearray_field( where=bytes_ref[4:4 + designator_length])
class BlockLimitsVPDPageBuffer(Buffer): peripheral_device = buffer_field(where=bytes_ref[0:], type=PeripheralDeviceDataBuffer) page_code = be_uint_field(where=bytes_ref[1]) page_length = be_uint_field(where=bytes_ref[2:4]) wsnz = be_uint_field(where=bytes_ref[4].bits[0]) maximum_compare_and_write_length = be_uint_field(where=bytes_ref[5]) optimal_transfer_length_granularity = be_uint_field(where=bytes_ref[6:8]) maximum_transfer_length = be_uint_field(where=bytes_ref[8:12]) optimal_transfer_length = be_uint_field(where=bytes_ref[12:16]) maximum_prefetch_xdread_xdwrite_transfer_length = be_uint_field( where=bytes_ref[16:20]) maximum_unmap_lba_count = be_uint_field(where=bytes_ref[20:24]) maximum_unmap_block_descriptor_count = be_uint_field( where=bytes_ref[24:28]) optimal_unmap_granularity = be_uint_field(where=bytes_ref[28:32]) unmap_granularity_alignment = be_uint_field( where=(bytes_ref[35] + bytes_ref[34] + bytes_ref[33] + bytes_ref[32].bits[0:7])) ugavalid = be_uint_field(where=bytes_ref[32].bits[7]) maximum_write_same_length = be_uint_field(where=bytes_ref[36:44])
class NAA_Descriptor(DesignatorDescriptor): naa = be_uint_field(where=bytes_ref[4].bits[4:8])
class EUI64_16Byte_Designator(DesignatorDescriptor): identifier_extension = be_uint_field(where=bytes_ref[4:12]) ieee_company = be_uint_field(where=bytes_ref[12:15]) vendor_specific_extension_identifer = be_uint_field(where=bytes_ref[15:20])
class NAA_IEEE_Extended_Designator(NAA_Descriptor): vendor_specific_identifier_a = be_uint_field( where=(bytes_ref[5] + bytes_ref[4].bits[0:4])) ieee_company = be_uint_field(where=bytes_ref[6:9]) vendor_specific_identifier_b = be_uint_field(where=bytes_ref[9:12])