impuls/lib/python3.11/site-packages/os_win/utils/winapi/libs/hbaapi.py

162 lines
5.3 KiB
Python

# Copyright 2016 Cloudbase Solutions Srl
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import ctypes
import os_win.conf
from os_win.utils.winapi import wintypes
CONF = os_win.conf.CONF
lib_handle = None
HBA_STATUS = ctypes.c_uint32
HBA_HANDLE = ctypes.c_uint32
HBA_PortType = ctypes.c_uint32
HBA_PortSpeed = ctypes.c_uint32
HBA_PortState = ctypes.c_uint32
HBA_COS = ctypes.c_uint32
HBA_FC4Types = ctypes.c_uint32 * 32
HBA_FCPBindingType = wintypes.INT
class HBA_WWN(ctypes.Structure):
_fields_ = [('wwn', ctypes.c_ubyte * 8)]
class HBA_PortAttributes(ctypes.Structure):
_fields_ = [('NodeWWN', HBA_WWN),
('PortWWN', HBA_WWN),
('PortFcId', ctypes.c_uint32),
('PortType', HBA_PortType),
('PortState', HBA_PortState),
('PortSupportedClassofService', HBA_COS),
('PortSupportedFc4Types', HBA_FC4Types),
('PortSymbolicName', wintypes.CHAR * 256),
('OSDeviceName', wintypes.CHAR * 256),
('PortSupportedSpeed', HBA_PortSpeed),
('PortSpeed', HBA_PortSpeed),
('PortMaxFrameSize', ctypes.c_uint32),
('FabricName', HBA_WWN),
('NumberOfDiscoveredPorts', ctypes.c_uint32)]
class HBA_FCPId(ctypes.Structure):
_fields_ = [('FcId', ctypes.c_uint32),
('NodeWWN', HBA_WWN),
('PortWWN', HBA_WWN),
('FcpLun', ctypes.c_uint64)]
class HBA_ScsiId(ctypes.Structure):
_fields_ = [('OSDeviceName', wintypes.CHAR * 256),
('ScsiBusNumber', ctypes.c_uint32),
('ScsiTargetNumber', ctypes.c_uint32),
('ScsiOSLun', ctypes.c_uint32)]
class HBA_FCPScsiEntry(ctypes.Structure):
_fields_ = [('ScsiId', HBA_ScsiId),
('FcpId', HBA_FCPId)]
def get_target_mapping_struct(entry_count=0):
class HBA_FCPTargetMapping(ctypes.Structure):
_fields_ = [('NumberOfEntries', ctypes.c_uint32),
('Entries', HBA_FCPScsiEntry * entry_count)]
def __init__(self, entry_count):
self.NumberOfEntries = entry_count
self.Entries = (HBA_FCPScsiEntry * entry_count)()
return HBA_FCPTargetMapping(entry_count)
class HBA_AdapterAttributes(ctypes.Structure):
_fields_ = [('Manufacturer', wintypes.CHAR * 64),
('SerialNumber', wintypes.CHAR * 64),
('Model', wintypes.CHAR * 256),
('ModelDescription', wintypes.CHAR * 256),
('NodeWWN', HBA_WWN),
('NodeSymbolicName', wintypes.CHAR * 256),
('HardwareVersion', wintypes.CHAR * 256),
('DriverVersion', wintypes.CHAR * 256),
('OptionROMVersion', wintypes.CHAR * 256),
('FirmwareVersion', wintypes.CHAR * 256),
('VendorSpecificID', ctypes.c_uint32),
('NumberOfPorts', ctypes.c_uint32),
('DriverName', wintypes.CHAR * 256)]
def register():
global lib_handle
lib_handle = ctypes.cdll.LoadLibrary(CONF.os_win.hbaapi_lib_path)
lib_handle.HBA_CloseAdapter.argtypes = [HBA_HANDLE]
lib_handle.HBA_CloseAdapter.restype = None
lib_handle.HBA_GetAdapterAttributes.argtypes = [
HBA_HANDLE,
ctypes.POINTER(HBA_AdapterAttributes)]
lib_handle.HBA_GetAdapterAttributes.restype = HBA_STATUS
lib_handle.HBA_GetAdapterName.argtypes = [
ctypes.c_uint32,
wintypes.PCHAR
]
lib_handle.HBA_GetAdapterName.restype = HBA_STATUS
lib_handle.HBA_GetAdapterPortAttributes.argtypes = [
HBA_HANDLE,
ctypes.c_uint32,
ctypes.POINTER(HBA_PortAttributes)
]
lib_handle.HBA_GetAdapterPortAttributes.restype = HBA_STATUS
lib_handle.HBA_GetFcpTargetMapping.argtypes = [
HBA_HANDLE,
wintypes.PVOID
]
lib_handle.HBA_GetFcpTargetMapping.restype = HBA_STATUS
lib_handle.HBA_GetNumberOfAdapters.argtypes = []
lib_handle.HBA_GetNumberOfAdapters.restype = ctypes.c_uint32
lib_handle.HBA_OpenAdapter.argtypes = [wintypes.PCHAR]
lib_handle.HBA_OpenAdapter.restype = HBA_HANDLE
lib_handle.HBA_OpenAdapterByWWN.argtypes = [
ctypes.POINTER(HBA_HANDLE),
HBA_WWN]
lib_handle.HBA_OpenAdapterByWWN.restype = HBA_STATUS
lib_handle.HBA_ScsiInquiryV2.argtypes = [
HBA_HANDLE,
HBA_WWN,
HBA_WWN,
ctypes.c_uint64,
ctypes.c_uint8,
ctypes.c_uint8,
wintypes.PVOID,
ctypes.POINTER(ctypes.c_uint32),
ctypes.POINTER(ctypes.c_uint8),
wintypes.PVOID,
ctypes.POINTER(ctypes.c_uint32)
]
lib_handle.HBA_ScsiInquiryV2.restype = HBA_STATUS
lib_handle.HBA_RefreshAdapterConfiguration.argtypes = []
lib_handle.HBA_RefreshAdapterConfiguration.restype = None