Files
interactive/fhs/arcmond2/external/include/arclib.h
2026-08-07 17:38:18 +09:00

2762 lines
88 KiB
C++

#ifndef _ARCLIB_H
#define _ARCLIB_H
#include "commdef.h"
#include "interface.h"
#ifdef _WIN32
#include <Winsock2.h>
#endif
#include "sasbase.h"
#ifdef __cplusplus
extern "C" {
#endif
#pragma pack(1)
// THE BELOW BLOCK IS ONLY FOR INTERNAL USE
/************************************************************************************/
enum
{
GUI_SET_SERIAL = 0x10,
GUI_SET_VENDOR,
GUI_SET_MODEL,
GUI_IDENTIFY,
GUI_CHECK_PASSWORD,
GUI_LOGOUT,
GUI_HTTP,
GUI_SET_ETHERNET_ADDR,
GUI_SET_LOGO,
GUI_POLL_EVENT,
GUI_GET_EVENT,
GUI_GET_HW_MONITOR,
GUI_SMART_TEST,
GUI_SET_TIME,
GUI_SNMP,
GUI_MISC,
GUI_GET_INFO_R = 0x20,
GUI_GET_INFO_V,
GUI_GET_INFO_P,
GUI_GET_INFO_S,
GUI_CLEAR_EVENT,
GUI_MUTE_BEEPER = 0x30,
GUI_BEEPER_SETTING,
GUI_SET_PASSWORD,
GUI_HOST_INTERFACE_MODE,
GUI_REBUILD_PRIORITY,
GUI_MAX_ATA_MODE,
GUI_RESET_CONTROLLER,
GUI_COM_PORT_SETTING,
GUI_NO_OPERATION,
GUI_DHCP_IP,
GUI_CREATE_PASS_THROUGH = 0x40,
GUI_MODIFY_PASS_THROUGH,
GUI_DELETE_PASS_THROUGH,
GUI_IDENTIFY_DEVICE,
GUI_CREATE_RAIDSET = 0x50,
GUI_DELETE_RAIDSET,
GUI_EXPAND_RAIDSET,
GUI_ACTIVATE_RAIDSET,
GUI_CREATE_HOT_SPARE,
GUI_DELETE_HOT_SPARE,
GUI_CREATE_VOLUME = 0x60,
GUI_MODIFY_VOLUME,
GUI_DELETE_VOLUME,
GUI_START_CHECK_VOLUME,
GUI_STOP_CHECK_VOLUME
};
// Application specific
enum
{
GUI_RAW_WRITE = 0xEE,
GUI_SET_ENCLOSURE_UNIT_SERIAL,
GUI_GET_TCPPORT,
GUI_GET_COMATTR,
// status code
GUI_WOULDBLOCK,
GUI_TIMEOUT
};
/****************************************************************************************/
//
// Library returned status
//
#define ARC_STATUS int
#define ARC_SUCCESS 0x00 // Operation succeeded
#define ARC_FAILURE 0x01 // Operation failed
#define ARC_RETURN_FRAME_ERROR 0x02 // The library does not recognize the returned data
// (including invalid data header, length or checksum, etc...)
#define ARC_INVALID_COM_HANDLE 0x03 // Invalid RS-232 handle
#define ARC_DATA_TRANSMIT_ERROR 0x04 // Failed to write to media
#define ARC_DATA_RECEIVE_ERROR 0x05 // Failed to read from media( no response from raid subsystem)
#define ARC_PARAMETER_ERROR 0x06 // The wrong parameter(s)
#define ARC_OPENFILE_ERROR 0x07 // Failed to open file
#define ARC_PASSWORD_REQUIRED 0x08 // Password required
#define ARC_INVALID_PASSWORD 0x09 // Wrong password
#define ARC_INSUFFICIENT_MEM 0x0A // Memory too small
#define ARC_CANT_ALLOC_MEM 0x0B // Failed to allocate necessary memory
#define ARC_BUFFER_TOO_SMALL 0x0C // The buffer is too small to put the returned data
#define ARC_SOCKET_ERROR 0x0D // Socket error
#define ARC_INVALID_SOCKET 0x0E // Invalid socket
#define ARC_INIT_COM_ERROR 0x0F // Failed to open COM port
#define ARC_SOCKET_STARTUP_ERROR 0x10 // Failed to init socket
#define ARC_INVALID_INTERFACE 0x11 // Invalid interface
#define ARC_NO_SUCH_DEVICE 0x12 // Device not found( including raidset, volumeset, physical drive )
#define ARC_DATA_TRANSMIT_TIMEOUT 0x13 // Failed to write to media in a given time
#define ARC_DATA_RECEIVE_TIMEOUT 0x14 // Failed to read from media in a given time
#define ARC_UNKNOWN_ERROR 0x3F // Unknown error
// RAID controller returned status
#define GUI_OK 0x41 // Operation successed
#define GUI_RAIDSET_NOT_NORMAL 0x42
#define GUI_VOLUMESET_NOT_NORMAL 0x43
#define GUI_NO_RAIDSET 0x44
#define GUI_NO_VOLUMESET 0x45
#define GUI_NO_PHYSICAL_DRIVE 0x46
#define GUI_PARAMETER_ERROR 0x47
#define GUI_UNSUPPORTED_COMMAND 0x48
#define GUI_DISK_CONFIG_CHANGED 0x49
#define GUI_INVALID_PASSWORD 0x4a
#define GUI_NO_DISK_SPACE 0x4b
#define GUI_CHECKSUM_ERROR 0x4c
#define GUI_PASSWORD_REQUIRED 0x4d
#define GUI_NO_MORE_DATA 0x4e // Internal use only
#define GUI_INTERNAL_ERROR 0x4f
#define GUI_FIRMWARE_CRC_ERROR 0x50
#define GUI_FIRMWARE_INVALID 0x51
#define GUI_FIRMWARE_UPDATE_FAILED 0x52
#define GUI_FIRMWARE_NO_HDD 0x53
#define GUI_END_OF_DATA 0x54
// flags of getting event
#define FLAG_ALL 0
#define FLAG_NEW 1
// Beeper settings
#define BEEPER_ON 1
#define BEEPER_OFF 0
// Host Mode
#define RAID 0
#define JBOD 1
#define DISABLE 0
#define ENABLE 1
#define ON 0
#define OFF 1
#define TYPE_64BIT_LBA 0
#define TYPE_4K_FOR_WIN 1
// host type interface
// HostType
#define HOST_PCI 1
#define HOST_PCIExpress 2
#define HOST_PATA 3
#define HOST_SATA1 4
#define HOST_SATA2 5
#define HOST_SCSI160 6
#define HOST_SCSI320 7
#define HOST_Fibre2G 8
#define HOST_Fibre4G 9
#define HOST_SAS 10
// TargetType
#define TARGET_PATA 1
#define TARGET_SATA 2
#define TARGET_SAS 3
#define TARGET_Fibre 4
// COM port attributes
typedef struct sCOM_ATTR
{
BYTE comBaudRate; // BaudRate: 0/1/2/3/4/5/6/7 (1200/2400/4800/9600/19200/38400/57600/115200)
BYTE comDataBits; // DataBit: always 1 (8 bits)
BYTE comStopBits; // StopBit: (0:1, 1:2 stop bits)
BYTE comParity; // Parity: always 0 (no parity)
BYTE comFlowControl; // FlowControl: always 0 (no flow control)
} sCOM_ATTR, *pCOM_ATTR;
// Rebuild priority
enum _REBUILD_PRIORITY
{
REBUILD_PRIORITY_ULOW, // Ultra Low(5%)
REBUILD_PRIORITY_LOW, // Low(20%)
REBUILD_PRIORITY_MEDIUM, // Medium(50%)
REBUILD_PRIORITY_HIGH, // High(80%)
TOTAL_REBUILD_PRIORITY
};
typedef struct sSYSTEM_INFO
{
BYTE gsiVendorName[40]; // Vendor name
BYTE gsiSerialNumber[16]; // Serial number
BYTE gsiFirmVersion[16]; // Version of firmware
BYTE gsiBootVersion[16]; // Version of boot
BYTE gsiMbVersion[16]; // Version of MBR(Master Boot Record)
BYTE gsiModelName[8]; // Model name
BYTE gsiLocalIp[4]; // Static IP if DHCP disabled
BYTE gsiCurrentIp[4]; // Current IP Address, the value is either assigned by DHCP server if DHCP enabled or static IP if DHCP disabled.
DWORD gsiTimeTick; // Raid subsystem current time tick
DWORD gsiCpuSpeed; // CPU speed ( in MHz )
DWORD gsiICache; // CPU internal Instruction cache size ( in bytes )
DWORD gsiDCache; // CPU internal Data Cache size ( in bytes )
DWORD gsiSCache; // CPU secondary cache size ( in bytes )
DWORD gsiMemorySize; // Memory size ( in MBs )
DWORD gsiMemorySpeed; // Memory speed ( in MHz )
DWORD gsiEvents; // # of IDE events supported
BYTE gsiMacAddress[6]; // MAC address if ethernet support
BYTE gsiDhcp; // 0: DHCP function disabled, 1: DHCP function enabled
BYTE gsiBeeper; // 0: Beeper disabled, 1: Beeper enabled
BYTE gsiChannelUsage; // 0: RAID , 1: JBOD
BYTE gsiMaxAtaMode; // Max ATA mode
BYTE gsiSdramEcc; // 1: If ECC enabled
BYTE gsiRebuildPriority; // Initialize/rebuild/migration priority
sCOM_ATTR gsiComA; // Attribute of COM1
sCOM_ATTR gsiComB; // Attribute of COM2
BYTE gsiIdeChannels; // # of IDE channels supported
BYTE gsiScsiHostChannels; // # of SCSI host channels supported
BYTE gsiIdeHostChannels; // # of IDE host channels supported
BYTE gsiMaxVolumeSet; // # of VolumeSets supported
BYTE gsiMaxRaidSet; // # of RaidSet supported
BYTE gsiEtherPort; // 1: If ethernet port supported
BYTE gsiRaid6Engine; // 1: Raid6 engine supported
BYTE gsiRs232Snmp; // 1: SNMP through RS232
BYTE gsiMIB_1;
BYTE gsiMIB_2;
DWORD gsiEnterpriseNum; // Enterprise number of SNMP
BYTE gsiHostType; // Host type
BYTE gsiTargetType; // Target type
BYTE gsiInBandEnable; // 1: If Inband enabled
BYTE gsiInBandChannel; // The SCSI channel of inband device
BYTE gsiInBandId; // The SCSI ID of inband device
BYTE gsiNumberEnclosures; // # of Enclosures supported(SAS only)
BYTE gsiR5060Supported; // 1: Raid Level30/50/60 supported
BYTE gsiRes[61]; //
} sSYSTEM_INFO, *pSYSTEM_INFO;
//=======================================================
// Definitions of raidset status
//=======================================================
#define RAID_NORMAL 0x01 // Raid set in use
#define RAID_COMPLETE 0x04 // 0: If incomplete
#define RAID_PASSTHROUGH 0x80 // Pass through raid set
typedef struct sGUI_RAIDSET
{
BYTE grsRaidSetName[16]; // 16 bytes raidset name
DWORD grsCapacity; // Minimum capacity in blocks required for each disk (member disk's minimum capacity)
DWORD grsCapacityX; // Reserved for 64 bit extension
DWORD grsFailMask; // Bit mask to indicate the failed drive (bit0 -- drive 0, bit1 -- drive 1 ....)
BYTE grsDevArray[32]; // Array for member disk's channel#
BYTE grsMemberDevices; // Number of member disks in this raid set
BYTE grsNewMemberDevices; // New number of disks in this raid set (in case of raid EXPANDing)
BYTE grsRaidState; // Current state of RAID set
BYTE grsVolumes; // # of volumes created in this raid set
BYTE grsVolumeList[16]; // Array of VOLUME NUMBER of the created volumes in this raid set
BYTE grsRes1; // Reserved
BYTE grsRes2; // Reserved
BYTE grsRes3; // Reserved
BYTE grsFreeSegments; // # of free segment in this raid set
DWORD grsRawStripes[8]; // Free segment array, each segment is 0x200 blocks for each member disk
DWORD grsRes4; // Reserved
DWORD grsRes5; // Reserved
DWORD grsRes6; // Reserved
BYTE grsVolumeListX[112]; // Array of VOLUME NUMBER of the created volumes in this raid set
BYTE grsDevEncArray[32]; // Array for member enclosure#
} sGUI_RAIDSET, *pGUI_RAIDSET;
//=======================================================
// Definitions of volume status
// Array status == OR of all of its volumes
// gvsVolumeStatus
//=======================================================
#define VOLUME_NORMAL 0x00
#define VOLUME_INITIALIZING 0x01
#define VOLUME_FAILED 0x02
#define VOLUME_MIGRATING 0x04
#define VOLUME_REBUILDING 0x08
#define VOLUME_NEED_INIT 0x10
#define VOLUME_NEED_MIGRATE 0x20
#define VOLUME_INIT_FLAG 0x40
#define VOLUME_NEED_REGEN 0x80
#define VOLUME_CHECKING 0x100
#define VOLUME_NEED_CHECK 0x200
#define VOLUME_MIGLBA_INVALID 0x400
#define VOLUME_MIGLBA_FAILED 0x800
#define VOLUME_CHECK_NO_SCRUB 0x1000
#define VOLUME_CHECK_NO_REGEN 0x2000
//=======================================================
// Definitions of volume state
// gvsVolState
//=======================================================
#define VOLUME_R5060_VOLUME 0x000100 // The volume is a member of another volume which raidlevel 30/50/60
#define VOLUME_R5060_PARENT 0x100000 // The volume is a root volume of raidlevel 30/50/60
//=======================================================
// Definitions of volume type
//=======================================================
#define VOLUME_TYPE_STRIPING 0 // Striping
#define VOLUME_TYPE_MIRROR 1 // Mirror
#define VOLUME_TYPE_RAID3 2 // RAID 3 volume
#define VOLUME_TYPE_RAID5 3 // RAID 5
#define VOLUME_TYPE_RAID6 4 // RAID 6
#define VOLUME_TYPE_PASSTHROUGH 5 // Pass through volume
//=======================================================
// Definitions of volume stripe size
//=======================================================
#define STRIPE_SIZE_4K 0
#define STRIPE_SIZE_8K 1
#define STRIPE_SIZE_16K 2
#define STRIPE_SIZE_32K 3
#define STRIPE_SIZE_64K 4
#define STRIPE_SIZE_128K 5
enum _SCSI_SPEED_MODE
{
SCSI_SPEED_ASYNC = 0,
SCSI_SPEED_20,
SCSI_SPEED_40,
SCSI_SPEED_80,
SCSI_SPEED_160,
TOTAL_SCSI_SPEED
};
enum _IDE_SPEED_MODE
{
IDE_SPEED_33 = 0,
IDE_SPEED_66,
IDE_SPEED_100,
IDE_SPEED_133,
TOTAL_IDE_SPEED
};
enum _SATA_SPEED_MODE
{
SATA_SPEED_150 = 0,
SATA_SPEED_150NCQ,
SATA_SPEED_300,
SATA_SPEED_300NCQ,
TOTAL_SATA_SPEED
};
#define BACKGROUND_INIT 0
#define FOREGROUND_INIT 1
enum _UDMA_MODE
{
UDMA_MODE_0 = 0, // Ultra DMA Mode 0 235ns 16.7 MB/s ATA-4¡BUltra ATA/16
UDMA_MODE_1, // Ultra DMA Mode 1 160ns 25 MB/s ATA-4¡BUltra ATA/25
UDMA_MODE_2, // Ultra DMA Mode 2 120ns 33.3 MB/s ATA-4¡BUltra ATA/33
UDMA_MODE_3, // Ultra DMA Mode 3 90ns 44.4 MB/s ATA-5¡BUltra ATA/44
UDMA_MODE_4, // Ultra DMA Mode 4 60ns 66.6 MB/s ATA-5¡BUltra ATA/66
UDMA_MODE_5, // Ultra DMA Mode 5 40ns 100 MB/s ATA-6¡BUltra ATA/100
UDMA_MODE_6, // Ultra DMA Mode 6 30ns 133MB/s ATA-7¡BUltra ATA/133
TOTAL_UDMA_MODE
};
typedef struct sGUI_VOLUMESET
{
BYTE gvsVolumeName[16]; // 16 bytes volumeset name
DWORD gvsCapacity; // Volume Capacity (in blocks)
DWORD gvsCapacityX; // Reserved for 64 bits
DWORD gvsFailMask; // Failed mask for the volume (same as raidset)
DWORD gvsStripeSize; // (value in blocks) 8--4K, 16--8K, 32--16K, 64--32K, 128--64K, 256--128K
DWORD gvsNewFailMask; // For internal use only
DWORD gvsNewStripeSize; // New stripe size ( used for MIGRATION)
DWORD gvsVolumeStatus; // See above ( volume status )
DWORD gvsProgress; // Progress for the volume if in (initializing/rebuilding/migrating)
sSCSI_ATTR gvsScsi; // SCSI attribute
BYTE gvsMemberDisks; // # of member disks
BYTE gvsRaidLevel; // Raid Level of this volume
BYTE gvsNewMemberDisks; // Used for migration
BYTE gvsNewRaidLevel; // Used for migration
BYTE gvsRaidSetNumber; // Raid set number that the volumeset belongs to
BYTE gvsVolState0; // Reserved
DWORD gvsHostSpeed; // Reserved
DWORD gvsVolState; // See above( volume state )
BYTE gvsVolArray[16]; // Child-volume table
BYTE gvsNum5060Volumes; // Number of volumes in the field 'gvsVolArray'
BYTE gvsRes[43]; //
} sGUI_VOLUMESET, *pGUI_VOLUMESET;
//=======================================================
// Definitions of device(disk) status
//=======================================================
#define DEV_INITIALIZED 0x80 // Device initialized
#define DEV_AVAILABLE 0x40 // Device available for use
#define DEV_HOT_SPARE 0x20 // Device is reserved for HOT SPARE
#define DEV_FAILED 0x10 // Device failed
#define DEV_ATTACHED 0x08 // Device attached
#define DEV_PASSTHROUGH 0x02 // Pass through device
//=======================================================
// Definitions of device(disk) status for SAS controller
//=======================================================
#define DEV_SATA_DEVICE 0x100 // Device is a SATA type
#define DEV_POWER_DOWN 0x200 // Device power down
typedef struct sGUI_PHY_DRV
{
BYTE gpdModelName[40]; // Model name
BYTE gpdSerialNumber[20]; // Serial number
BYTE gpdFirmRev[8]; // Firmware version
DWORD gpdCapacity; // Capacity in blocks ( A block = 512 bytes )
DWORD gpdCapacityX; // Reserved for expansion
BYTE gpdDeviceState; // See above, for SAS controller: this field is treated as the low-byte of device state
BYTE gpdPioMode; // For SAS controller: this field is treated as the high-byte of device state
BYTE gpdCurrentUdmaMode; // Current UDMA mode
BYTE gpdUdmaMode; // Max supported UDMA mode
BYTE gpdDriveSelect; // Drive select : master / slave
BYTE gpdRaidNumber; // 0xff if not belongs to a raid set
sSCSI_ATTR gpdScsi; // SCSI attributes
LONG gpdMediaErrorCount; // Media error count
LONG gpdTimeOutCount; // Timeout count
u_int64_t gpdSasAddress; // SAS only
union
{
struct
{
sSMART_DATA gpdSmart[TOTAL_SMART_ITEMS]; // see sasbase.h 'enum _SMART_ITEMS'
} sata; // SMART data for SATA disk
struct
{
WORD gpdRotationRPM; // The rotation(RPM) of disk
WORD gpdTemperature; // The temperature of disk
WORD gpdSmartSenseCode; // The SMART sense code
WORD gpdReserved;
u_int64_t gpdAttribute[TOTAL_SAS_ATTR_ITEMS]; // The SAS disk attributes, see sasbase.h '_SAS_ATTRIBUTE_ITEMS'
} sas; // Attributes for SAS disk
} u;
} sGUI_PHY_DRV, *pGUI_PHY_DRV;
//=======================================================
// Definition for event buffer
//=======================================================
// Event category
enum
{
EVENT_NO_EVENT,
EVENT_RAIDSET,
EVENT_VOLUMESET,
EVENT_DEVICE,
EVENT_HOST,
EVENT_HW_MONITOR,
EVENT_NEW_83782D,
};
// Event type
// 1. RaidSet event
enum
{
RS_EVT_CREATE,
RS_EVT_DELETE,
RS_EVT_EXPAND,
RS_EVT_REBUILD,
RS_EVT_DEGRADED,
RS_EVT_NO_EVENT,
};
// 2. volumeset event
enum
{
VS_EVT_INITIALIZING,
VS_EVT_REBUILDING,
VS_EVT_MIGRATING,
VS_EVT_CHECKING,
VS_EVT_COMPLETE_INIT,
VS_EVT_COMPLETE_REBUILD,
VS_EVT_COMPLETE_MIGRATING,
VS_EVT_COMPLETE_CHECKING,
VS_EVT_CREATE,
VS_EVT_DELETE,
VS_EVT_MODIFY,
VS_EVT_DEGRADED,
VS_EVT_FAILED,
VS_EVT_REVIVED,
// init/rebuild/migration ABORT & STOP event
VS_EVT_ABORT_INIT,
VS_EVT_ABORT_REBUILD,
VS_EVT_ABORT_MIGRATING,
VS_EVT_ABORT_CHECKING,
VS_EVT_STOP_INIT,
VS_EVT_STOP_REBUILD,
VS_EVT_STOP_MIGRATING,
VS_EVT_STOP_CHECKING,
VS_EVT_TOTALS
};
#define REBUILD_TYPE_INIT VS_EVT_INITIALIZING
#define REBUILD_TYPE_REGEN VS_EVT_REBUILDING
#define REBUILD_TYPE_MIG VS_EVT_MIGRATING
#define REBUILD_TYPE_CHECK VS_EVT_COMPLETE_INIT
// IDE device event
enum
{
DEV_EVT_ADDED,
DEV_EVT_REMOVED,
DEV_EVT_READ_ERROR,
DEV_EVT_WRITE_ERROR,
DEV_EVT_ATA_ECC_ERROR,
DEV_EVT_ATA_CHANGE_MODE,
DEV_EVT_TIMEOUT,
DEV_EVT_MARK_FAILED,
DEV_EVT_PCI_ERROR,
DEV_EVT_SMART_FAILED,
DEV_EVT_CREATE_PASS,
DEV_EVT_MODIFY_PASS,
DEV_EVT_DELETE_PASS,
DEV_EVT_TOTALS
};
// SCSI bus event
enum
{
SCSI_EVT_RESET,
SCSI_EVT_PARITY,
SCSI_BUS_MODE_CHANGE,
SCSI_EVT_TOTALS
};
// Hw monitor event
enum
{
HW_EVT_SDRAM_1BIT_ECC,
HW_EVT_SDRAM_MULTI_BIT_ECC,
HW_EVT_TEMP_CONTROLLER,
HW_EVT_TEMP_BACKPLANE,
HW_EVT_VOLTAGE15,
HW_EVT_VOLTAGE3,
HW_EVT_VOLTAGE5,
HW_EVT_VOLTAGE12,
HW_EVT_VOLTAGE1_3,
HW_EVT_VOLTAGE2_5,
HW_EVT_VOLTAGE1_25,
HW_EVT_POWER1_FAILED,
HW_EVT_FAN1_FAILED,
HW_EVT_POWER2_FAILED,
HW_EVT_FAN2_FAILED,
HW_EVT_POWER3_FAILED,
HW_EVT_FAN3_FAILED,
HW_EVT_POWER4_FAILED,
HW_EVT_FAN4_FAILED,
HW_EVT_UPS_POWER_LOSS,
// Add to log H/W monitor recovered
HW_EVT_TEMP_CONTROLLER_R,
HW_EVT_TEMP_BACKPLANE_R,
HW_EVT_VOLTAGE15_R,
HW_EVT_VOLTAGE3_R,
HW_EVT_VOLTAGE5_R,
HW_EVT_VOLTAGE12_R,
HW_EVT_VOLTAGE1_3_R,
HW_EVT_VOLTAGE2_5_R,
HW_EVT_VOLTAGE1_25_R,
HW_EVT_POWER1_RECOVERED,
HW_EVT_FAN1_RECOVERED,
HW_EVT_POWER2_RECOVERED,
HW_EVT_FAN2_RECOVERED,
HW_EVT_POWER3_RECOVERED,
HW_EVT_FAN3_RECOVERED,
HW_EVT_POWER4_RECOVERED,
HW_EVT_FAN4_RECOVERED,
HW_EVT_UPS_POWER_RECOVERED,
HW_EVT_SYSTEM_RESTARTED,
HW_EVT_TEST,
// added for battery backup
HW_EVT_SYSTEM_RECOVERED, // return from BBM
HW_EVT_TOTALS
};
enum
{
GHM_RECOVER,
GHM_OVER_TEMP,
GHM_FAILED,
GHM_UNDER_VOLTAGE,
GHM_OVER_VOLTAGE,
GHM_DISCOVERED,
GHM_LOST_MIG, // record migration point maybe lost
GHM_OFFLINED,
GHM_HTTP_LOGIN,
GHM_TELNET_LOGIN,
GHM_VT100_LOGIN,
GHM_GUI_LOGIN,
GHM_FC_LINK_UP,
GHM_FC_LINK_DOWN,
GHM_16BYTES_CDB,
GHM_INIT_LBA, // restart init LBA
GHM_REBUILD_LBA, // restart rebuild LBA
GHM_MIGRATE_LBA, // restart migration LBA
GHM_ONE_BIT_ECC,
GHM_MULTI_BIT_ECC,
GHM_OFF,
GHM_UNKNOWN,
GHM_ADDED,
GHM_REMOVED,
GHM_TOTALS
};
#if defined(__BIG_ENDIAN__)
typedef union sSYS_TIME
{
struct
{
DWORD tmFlag:1;
DWORD tmMonth:4;
DWORD tmYear:5;
DWORD tmDate:5;
DWORD tmHour:5;
DWORD tmMinute:6;
DWORD tmSecond:6;
} u;
struct
{
int32_t tmFlag:1;
int32_t tmTick:31;
} x;
} sSYS_TIME, *pSYS_TIME;
#else
typedef union sSYS_TIME
{
struct
{
DWORD tmSecond:6;
DWORD tmMinute:6;
DWORD tmHour:5;
DWORD tmDate:5;
DWORD tmYear:5;
DWORD tmMonth:4;
DWORD tmFlag:1;
} u;
struct
{
int32_t tmTick:31;
int32_t tmFlag:1;
} x;
} sSYS_TIME, *pSYS_TIME;
// If (tmFlag == 1) ==> use YY/MM/DD/HH/MM/SS else use time tick
#endif
/* event object data structure */
typedef struct sEVET_DATA
{
BYTE evtCategory; // Event category
BYTE evtType; // Event type
BYTE evtChannel; // Event channel
BYTE evtFlag; // Addition data flag
int32_t evtTime; // Occurred time
DWORD evtData1; // Additional data1
DWORD evtData2; // Additional data2
BYTE evtStr[16]; // string for event
} sEVENT_DATA, *pEVENT_DATA; // total 32 bytes
/* strings for event category */
static const char *eventCat[] =
{
"NO_EVENT",
"RAIDSET",
"VOLUMESET",
"DEVICE",
"HOST",
"H/W MONITOR"
};
/* strings for device event */
static const char *htmDevEvent[] =
{
"Device Inserted",
"Device Removed",
"Reading Error",
"Writing Error",
"ATA Ecc Error",
"Change ATA Mode",
"Time Out Error",
"Device Failed",
"PCI Parity Error",
"Dev Fail (SMART)",
"PassThrough Disk Created",
"PassThrough Disk Modified",
"PassThrough Disk Deleted"
};
/* strings for volumeset event */
static const char *htmVolEvent[] =
{
"Start Initialize",
"Start Rebuilding",
"Start Migrating",
"Start Checking",
"Complete Init",
"Complete Rebuild",
"Complete Migrate",
"Complete Check",
"Create Volume",
"Delete Volume",
"Modify Volume",
"Volume Degraded",
"Volume Failed",
"Failed Volume Revived",
"Abort Initialization",
"Abort Rebuilding",
"Abort Migration",
"Abort Checking",
"Stop Initialization",
"Stop Rebuilding",
"Stop Migration",
"Stop Checking"
};
/* strings for raidSet event */
static const char *htmRaidEvent[] =
{
"Create RaidSet",
"Delete RaidSet",
"Expand RaidSet",
"Rebuild RaidSet",
"RaidSet Degraded"
};
/* strings for scsi host event */
static const char *htmScsiHostEvent[] =
{
"SCSI Bus Reset",
"SCSI Bus Parity",
"SCSI Bus SE<>LVD"
};
/* strings for ide host event */
static const char *htmIdeHostEvent[] =
{
"IDE Bus Reset",
"IDE Bus UDMA CRC",
"SCSI Bus SE<>LVD"
};
/* strings for hardware monitor event */
static const char *htmHwMonEvent[] =
{
"DRAM 1-Bit ECC",
"DRAM Fatal Error",
"Controller Over Temperature",
"Backplane Over Temperature",
"1.5V Abnormal",
"3.3V Abnormal",
"5V Abnormal",
"12V Abnormal",
"1.3V Abnormal",
"2.5V Abnormal",
"1.2V or 1.8V or 1.25V Abnormal",
"Power#1 Failed ",
"Fan#1 Failed ",
"Power#2 Failed ",
"Fan#2 Failed ",
"Power#3 Failed ",
"Fan#3 Failed ",
"Power#4 Failed ",
"Fan#4 Failed ",
"UPS ACPower Loss",
"Controller Over Temperature Recovered",
"Backplane Over Temperature Recovered",
"1.5V Abnormal Recovered",
"3.3V Abnormal Recovered",
"5V Abnormal Recovered",
"12V Abnormal Recovered",
"1.3V Abnormal Recovered",
"2.5V Abnormal Recovered",
"1.2V or 1.8V or 1.25V Abnormal Recovered",
"Power#1 Failed Recovered",
"Fan#1 Failed Recovered",
"Power#2 Failed Recovered",
"Fan#2 Failed Recovered",
"Power#3 Failed Recovered",
"Fan#3 Failed Recovered",
"Power#4 Failed Recovered",
"Fan#4 Failed Recovered",
"UPS ACPower Loss Recovered",
"Raid Powered On",
"Test Event",
"Power On With Battery Backup"
};
/* strings for new events */
static const char *htmNewEventStr[] =
{
"Recovered",
"Over Temp.",
"Failed",
"Under Voltage",
"Over Voltage",
"Discovered",
"Lost Rebuilding/Migration LBA",
"Offlined",
"HTTP Log In",
"Telnet Log In",
"VT100 Log In",
"API Log In",
"FC Link Up",
"FC Link Down",
"In U160 Mode",
"Restart Init LBA Point",
"Restart Rebuild LBA Point",
"Restart Migration LBA Point",
"One BIT ECC Error",
"Multi BIT ECC Error",
"Off",
"Unknown Error",
"Added",
"Removed"
};
/* event notification level*/
enum _EVT_LEVEL
{
EVT_DISABLE = 0,
EVT_SERIOUS, // 1 serious event
EVT_ERROR, // 2 error
EVT_WARNING, // 3 warning
EVT_INFO // 4 information
};
/* event notification level for raidset */
static BYTE raidEventLevel[] =
{
EVT_WARNING, //RS_EVT_CREATE,
EVT_WARNING, //RS_EVT_DELETE,
EVT_WARNING, //RS_EVT_EXPAND,
EVT_WARNING, //RS_EVT_REBUILD,
EVT_SERIOUS //RS_EVT_DEGRADED,
};
/* event notification level for volumeset */
static BYTE volEventLevel[] =
{
EVT_WARNING, //VS_EVT_INITIALIZING,
EVT_WARNING, //VS_EVT_REBUILDING,
EVT_WARNING, //VS_EVT_MIGRATING,
EVT_WARNING, //VS_EVT_CHECKING,
EVT_WARNING, //VS_EVT_COMPLETE_INIT,
EVT_WARNING, //VS_EVT_COMPLETE_REBUILD,
EVT_WARNING, //VS_EVT_COMPLETE_MIGRATING,
EVT_WARNING, //VS_EVT_COMPLETE_CHECKING,
EVT_WARNING, //VS_EVT_CREATE,
EVT_WARNING, //VS_EVT_DELETE,
EVT_WARNING, //VS_EVT_MODIFY,
EVT_SERIOUS, //VS_EVT_DEGRADED,
EVT_SERIOUS, //VS_EVT_FAILED,
EVT_SERIOUS, //VS_EVT_REVIVED,
// init/rebuild/migration ABORT & STOP event
EVT_WARNING, //VS_EVT_ABORT_INIT,
EVT_WARNING, //VS_EVT_ABORT_REBUILD,
EVT_WARNING, //VS_EVT_ABORT_MIGRATING,
EVT_WARNING, //VS_EVT_ABORT_CHECKING,
EVT_WARNING, //VS_EVT_STOP_INIT,
EVT_WARNING, //VS_EVT_STOP_REBUILD,
EVT_WARNING, //VS_EVT_STOP_MIGRATING,
EVT_WARNING //VS_EVT_STOP_CHECKING,
};
/* event notification level for disk */
static BYTE devEventLevel[] =
{
EVT_WARNING, //DEV_EVT_ADDED,
EVT_WARNING, //DEV_EVT_REMOVED,
EVT_WARNING, //DEV_EVT_READ_ERROR,
EVT_WARNING, //DEV_EVT_WRITE_ERROR,
EVT_WARNING, //DEV_EVT_ATA_ECC_ERROR,
EVT_WARNING, //DEV_EVT_ATA_CHANGE_MODE,
EVT_WARNING, //DEV_EVT_TIMEOUT,
EVT_SERIOUS, //DEV_EVT_MARK_FAILED,
EVT_ERROR, //DEV_EVT_PCI_ERROR,
EVT_SERIOUS, //DEV_EVT_SMART_FAILED,
EVT_INFO, //DEV_EVT_CREATE_PASS,
EVT_INFO, //DEV_EVT_MODIFY_PASS,
EVT_INFO, //DEV_EVT_DELETE_PASS,
};
/* event notification level for host */
static BYTE hostEventLevel[] =
{
EVT_INFO, //SCSI_EVT_RESET,
EVT_INFO, //SCSI_EVT_PARITY,
EVT_INFO //SCSI_BUS_MODE_CHANGE,
};
/* event notification level for hardware monitor */
static BYTE hwEventLevel[] =
{
EVT_SERIOUS, //HW_EVT_SDRAM_1BIT_ECC,
EVT_SERIOUS, //HW_EVT_SDRAM_MULTI_BIT_ECC,
EVT_SERIOUS, //HW_EVT_TEMP_CONTROLLER,
EVT_SERIOUS, //HW_EVT_TEMP_BACKPLANE,
EVT_SERIOUS, //HW_EVT_VOLTAGE15,
EVT_SERIOUS, //HW_EVT_VOLTAGE3,
EVT_SERIOUS, //HW_EVT_VOLTAGE5,
EVT_SERIOUS, //HW_EVT_VOLTAGE12,
EVT_SERIOUS, //HW_EVT_VOLTAGE1_3,
EVT_SERIOUS, //HW_EVT_VOLTAGE2_5,
EVT_SERIOUS, //HW_EVT_VOLTAGE1_25,
EVT_SERIOUS, //HW_EVT_POWER1_FAILED,
EVT_SERIOUS, //HW_EVT_FAN1_FAILED,
EVT_SERIOUS, //HW_EVT_POWER2_FAILED,
EVT_SERIOUS, //HW_EVT_FAN2_FAILED,
EVT_SERIOUS, //HW_EVT_POWER3_FAILED,
EVT_SERIOUS, //HW_EVT_FAN3_FAILED,
EVT_SERIOUS, //HW_EVT_POWER4_FAILED,
EVT_SERIOUS, //HW_EVT_FAN4_FAILED,
EVT_SERIOUS, //HW_EVT_UPS_POWER_LOSS,
// Add to log H/W monitor recovered
EVT_ERROR, //HW_EVT_TEMP_CONTROLLER_R,
EVT_ERROR, //HW_EVT_TEMP_BACKPLANE_R,
EVT_ERROR, //HW_EVT_VOLTAGE15_R,
EVT_ERROR, //HW_EVT_VOLTAGE3_R,
EVT_ERROR, //HW_EVT_VOLTAGE5_R,
EVT_ERROR, //HW_EVT_VOLTAGE12_R,
EVT_ERROR, //HW_EVT_VOLTAGE1_3_R,
EVT_ERROR, //HW_EVT_VOLTAGE2_5_R,
EVT_ERROR, //HW_EVT_VOLTAGE1_25_R,
EVT_ERROR, //HW_EVT_POWER1_RECOVERED,
EVT_ERROR, //HW_EVT_FAN1_RECOVERED,
EVT_ERROR, //HW_EVT_POWER2_RECOVERED,
EVT_ERROR, //HW_EVT_FAN2_RECOVERED,
EVT_ERROR, //HW_EVT_POWER3_RECOVERED,
EVT_ERROR, //HW_EVT_FAN3_RECOVERED,
EVT_ERROR, //HW_EVT_POWER4_RECOVERED,
EVT_ERROR, //HW_EVT_FAN4_RECOVERED,
EVT_ERROR, //HW_EVT_UPS_POWER_RECOVERED,
EVT_WARNING, //HW_EVT_SYSTEM_RESTARTED,
EVT_SERIOUS, //HW_EVT_TEST_EVENT,
// added for battery backup
EVT_ERROR //HW_EVT_SYSTEM_RECOVERED,
};
/* event notification level for new event */
static BYTE newEventLevel[] =
{
EVT_ERROR, // 0 GHM_RECOVER
EVT_SERIOUS, // 1 GHM_OVER_TEMP
EVT_SERIOUS, // 2 GHM_FAILED
EVT_SERIOUS, // 3 GHM_UNDER_VOLTAGE
EVT_SERIOUS, // 4 GHM_OVER_VOLTAGE
EVT_ERROR, // 5 GHM_DISCOVERED
EVT_SERIOUS, // 6 GHM_LOST_MIG
EVT_SERIOUS, // 7 GHM_RESTART_LBA // not used
EVT_ERROR, // 8 GHM_HTTP_LOGIN
EVT_ERROR, // 9 GHM_TELNET_LOGIN
EVT_ERROR, // 10 GHM_VT100_LOGIN
EVT_ERROR, // 11 GHM_GUI_LOGIN
EVT_INFO, // 12 GHM_FC_LINK_UP
EVT_INFO, // 13 GHM_FC_LINK_DOWN
EVT_ERROR, // 14 GHM_16BYTES_CDB,
EVT_SERIOUS, // 15 GHM_INIT_LBA, // restart init LBA
EVT_SERIOUS, // 16 GHM_REBUILD_LBA, // restart rebuild LBA
EVT_SERIOUS // 17 GHM_MIGRATE_LBA // restart migration LBA
};
/* event level string */
static const char *eventWLevel[] =
{
"DISABLE",
"URGENT", // EVT_SERIOUS
"SERIOUS", // EVT_ERROR
"WARNING", // EVT_WARNING
"INFORMATIONAL" // EVT_INFO
};
#define UPS_AC_POWER_LOSS 0x03
#define UPS_OK 0x07
// Battery status
// 0--100 : battery charging status (percentage)
// 255 : battery not installed
// 254 : battery failed
#define BBM_NOT_INSTALLED 255
#define BBM_FAILED 254
///////////////////////////////////////////////////////////////////////////////////
//
// HWMON_ITEMS
// Indicating the ArcGetHWMon(...) how to retrieve hardware information.
//
enum
{
HWMON_FAN_INFO = 0x01,
HWMON_VOL_INFO,
HWMON_TMP_INFO,
HWMON_PWR_INFO,
HWMON_UPS_INFO,
HWMON_BATTERY_INFO, //BBM(Battery Backup Module)
HWMON_TOTAL
};
typedef struct _HWMON_INFO
{
WORD HwItemCount; // item count of hardware( including fans, voltages, temperatures, powers)
WORD ItemInfo[50]; // item information
}sHwMonInfo, *pHwMonInfo;
///////////////////////////////////////////////////////////////////////////////////
//
// Hardware monitor information for raid controller excepts ARC-5010 & ARC-6010.
// ARC-5010 & ARC-6010 should use the "sHwMon5010" data structure instead.
// Because the number of fans, voltages, temperatures and powers are differ from
// models of areca except the ARC-5010 & ARC-6010, so we use the flexible data
// structure instead for different models of areca.
//
// Pass the flag above & pointer of the struct _HWMON_INFO to the ArcGetHWMon(...) to
// retrieve the hardware information.
//
//////////////////////////////////////////////////////////////////////////////////////////////////
// For example: Retrieving hardware monitor of fans
//
// CArclib al;
// ARC_STATUS status;
// sHwMonInfo HwInfo;
//
// WinCommInterface *iface = new WinCommInterface();
// if(!iface->init(0)) // init "COM1"
// return;
// status = al.ArcInitSession(iface);
// if(status != ARC_SUCCESS)
// {
// .... handle error .....
// }
// status = al.ArcGetHWMon(HWMON_FAN_INFO, &HwInfo);
//
// if the status = ARC_SUCCESS, then the contents of HwInfo are:
// HwInfo.HwItemCount ==> # of fans
// HwInfo.ItemInfo[0] ==> RPM of 1st fan
// HwInfo.ItemInfo[1] ==> RPM of 2nd fan
// ...
// HwInfo.ItemInfo[HwInfo.HwItemCount - 1] ==> RPM of the last fan
//
//////////////////////////////////////////////////////////////////////////////////////////////////
// For example: Retrieving hardware monitor of voltage
// status = al.ArcGetHWMon(HWMON_VOL_INFO, &HwInfo);
// if the status = ARC_SUCCESS, then the contents of HwInfo are:
// HwInfo.HwItemCount ==> # of voltage items
// HwInfo.ItemInfo[0] ==> base value of 1st voltage
// HwInfo.ItemInfo[1] ==> current value of 1st voltage
// HwInfo.ItemInfo[2] ==> base value of 2nd voltage
// HwInfo.ItemInfo[3] ==> current value of 2nd voltage
// ...
// HwInfo.ItemInfo[HwInfo.HwItemCount * 2 - 2] ==> base value of last voltage
// HwInfo.ItemInfo[HwInfo.HwItemCount * 2 - 1] ==> current value of last voltage
//
//////////////////////////////////////////////////////////////////////////////////////////////////
// For example: Retrieving hardware monitor of temperature
// status = al.ArcGetHWMon(HWMON_TMP_INFO, &HwInfo);
// if the status = ARC_SUCCESS, then the contents of HwInfo are:
// HwInfo.HwItemCount ==> # of temperature items
// HwInfo.ItemInfo[0] ==> controller temperature
// HwInfo.ItemInfo[1] ==> 1st HDD temperature
// HwInfo.ItemInfo[2] ==> 2nd HDD temperature
// ...
// HwInfo.ItemInfo[HwInfo.HwItemCount - 1] ==> last temperature of HDD
//
//////////////////////////////////////////////////////////////////////////////////////////////////
// For example: Retrieving hardware monitor of power
// status = al.ArcGetHWMon(HWMON_PWR_INFO, &HwInfo);
// if the status = ARC_SUCCESS, then the contents of HwInfo are:
// HwInfo.HwItemCount ==> # of power items
// HwInfo.ItemInfo[0] ==> 1st power state
// HwInfo.ItemInfo[1] ==> 2nd power state
// ...
// HwInfo.ItemInfo[HwInfo.HwItemCount - 1] ==> last power state
//
//////////////////////////////////////////////////////////////////////////////////////////////////
// Note: Areca specifications
// For fans: the fan speed != 0 means fan ok else failed, if the speed == 0xffff then there is
// no fan connected.
// For voltages: one voltage has pair values, one for base value(fixed), the other for current
// voltage value
// if ( current value > base value * 1.1) or (current value < base value * 0.9)
// then the voltage is abnormal.
// For temperature: Including Controller & HDD temperature, the 1st value is controller temperature
// and the others are HDD temperatures.
// If the value over 60 degrees of centigrade, then the temperature is abnormal.
// For power: The value is "1" means the power Ok , "0" means failed.
//
///////////////////////////////////////////////////////////////////////////////////
//
// Hardware monitor data structure for 5 bays machines only (ARC-5010 & ARC-6010).
// Since the number of fans, voltages, temperatures and powers of the ARC-5010 & ARC-6010
// are fixed, so we can use the "fixed" data structure to retrieve hardware information.
//
typedef struct _HWMON_5010
{
BYTE fans; // # of fans
BYTE voltages; // # of voltages
BYTE temps; // # of temperatures ( only Controller & BackPlane )
BYTE powers; // # of powers
WORD monFan; // fan speed(in RPM)
WORD fixed12V; // always 12000mV(12V)
WORD mon12V; // current voltage of 12000mV
WORD fixed5V; // always 5000mV(5V)
WORD mon5V; // current voltage of 5000mV
WORD fixed3_3V; // always 3300mV(3.3V)
WORD mon3_3V; // current voltage of 3300mV
WORD fixed1_5V; // always 1500mV(1.5V)
WORD mon1_5V; // current voltage of 1500mV
BYTE monCtrlTemp; // current temperature of contoller(in degrees centigrade)
BYTE monBkPlaneTemp; // current temperature of backplane(in degrees centigrade)
BYTE reserved[2]; // not use
} sHwMon5010, *pHwMon5010;
///////////////////////////////////////////////////////////////////////////////////
//
// Volumeset capabilities pass into ArcCreateVolSet(...)
//
typedef struct _VOLUMESET_CAP
{
DWORD structs_size; // size of _VOLUMESET_CAP structure
BYTE raid; // RAIDSet Number that volumeset belongs to.
char volname[16]; // volume Set Name
double capacity; // volume capacity size ( in GBs )
BYTE raidlevel; // raid level
BYTE stripsize; // stripe size (0/1/2/3/4/5->4/8/16/32/64/128K)
BYTE channel; // channel#
BYTE id; // ID#
BYTE lun; // LUN#
BOOL tag; // Enable tag queue(1 : enabled)
BOOL cache; // Enable cache(1 : enabled)
BYTE speed; // speed (0/1/2/3/4->async/20/40/80/160 for scsi)
// (0/1/2/3/4->33/66/100/133/150 for IDE)
BYTE quickinit; //0:background init, 1:foreground init
}sVolumeSetCap, *pVolumeSetCap;
///////////////////////////////////////////////////////////////////////////////////
//
// New volumeset capabilities pass into ArcModifyVolSet(...)
//
typedef struct _NEW_VOLUMESET_CAP
{
DWORD structs_size; // size of _NEW_VOLUMESET_CAP structure
BYTE vol; // VolumeSet Number
char newVolname[16]; // volume Set Name
double newCapacity; // volume capacity size in GBs (reserved)
BYTE newRaidlevel; // raid level
BYTE newStripsize; // stripe size (0/1/2/3/4/5->4/8/16/32/64/128K)
BYTE newChannel; // channel#
BYTE newId; // ID#
BYTE newLun; // LUN#
BYTE newTag; // Enable tag queue(1 : enabled)
BYTE newCache; // Enable cache(1 : enabled)
BYTE newSpeed; // speed (0/1/2/3/4->async/20/40/80/160 for scsi)
// (0/1/2/3/4->33/66/100/133/150 for IDE)
}sNewVolumeSetCap, *pNewVolumeSetCap;
///////////////////////////////////////////////////////////////////////////////////
//
// Pass-through disk capabilities pass into ArcCreatePassthroughDisk(...)
//
#define ATA33 0
#define ATA66 1
#define ATA100 2
#define ATA133 3
#define ATA150 4
typedef struct _PASS_DISK_CAP
{
DWORD structs_size; // size of _PASS_DISK_CAP structure
BYTE nDevNum; // device #
BYTE nScsiCh; // scsi channel (0/1)
BYTE nScsiId; // scsi id (0-->15)
BYTE nScsiLun; // scsi lun (0-->7)
BYTE nTaggedQue; // tagged queue (1 : enabled)
BYTE nCache; // cache mode (1 : enabled)
BYTE nMaxSpeed; // (0/1/2/3/4, async/20/40/80/160 for scsi)
// (0/1/2/3, 33/66/100/133 for ide)
}sPassDiskCap, *pPassDiskCap;
typedef struct _VOL_MOD
{
BYTE num_vol; // volumeset# to modify
BYTE newlevel; // new raid level of volumeset
BYTE newstripesize; // new stripe size of volumeset
BYTE reserved; // reserved
}sVolMod, *pVolMod;
typedef struct _VOL_MOD_LIST
{
BYTE total_vol; // specifies how many volumesets to modify
sVolMod vol_list[128]; //
}sVolModList, *pVolModList;
#ifndef OID
#define OID long
#endif
typedef struct _NET_INFO
{
BYTE dhcp; // 1 for enabled, 0 for disabled
BYTE local_ip[4]; // for static IP
BYTE gateway_ip[4]; // for static gateway
BYTE subnet_mask[4]; // for static subnet mask
WORD http_port; // current http port#
WORD telnet_port; // current telnet port#
WORD smtp_port; // current smtp port#
BYTE current_ip[4]; // current IP address
BYTE mac_addr[6]; // MAC address
BYTE reserved[3];
}sNET_INFO, *pNET_INFO;
typedef struct _SYS_CONFIG_INFO
{
BYTE beeper; // beeper setting
BYTE bgtask_priority; // background task priority setting
BYTE jbod_raid; // JBOD/RAID setting
BYTE hdd_read_ahead; // HDD read ahead cache setting
BYTE stagger_power_on; // stagger power on setting
BYTE auto_spin_down; // auto spin down
BYTE empty_hdd_slot_led; // empty hdd slot led setting
BYTE cpu_fan_detect; // cpu fan detect
BYTE hdd_smart_status_polling; // hdd smart status polling
BYTE auto_activate_incomplete_raid; // auto activate incomplete raid
BYTE disk_write_cache; // disk write cache
BYTE disk_capacity_truncation; // disk capacity truncation
BYTE reserved[1];
}sSYS_CONFIG_INFO, *pSYS_CONFIG_INFO;
// SMTP SUPPORTED
typedef struct _MAIL_ADDR
{
BYTE mailName[20]; // name
BYTE mailAddress[50]; // mail address, format: abc@company.com
} sMAIL_ADDR, *pMAIL_ADDR;
typedef struct _MAIL_CONFIG
{
BYTE ip[4]; // smtp server ip
BYTE account[50]; // account
BYTE password[20]; // password
sMAIL_ADDR sender; // 1 sender address
sMAIL_ADDR mailto[4]; // 4 mailto address
DWORD eventlevel; // event notification level(MAIL)
DWORD notificationfornoevent; // notify user if no event occurs within 24 hours
}sMAIL_INFO, *pMAIL_INFO;
// SNMP SUPPORTED
typedef struct _SNMP_CONFIG
{
BYTE ip[3][4]; // snmp trap ip 1, 2, 3
WORD port[3]; // snmp trap port 1, 2, 3
BYTE community[16]; // snmp community
BYTE contact[32]; // snmp sys contact
BYTE location[32]; // snmp sys location
BYTE name[32]; // snmp sys name
DWORD eventlevel; // event notification level(SNMP)
BYTE reserved[2]; // reserved
}sSNMP_CONFIG, *pSNMP_CONFIG;
/*
typedef struct _DEVICE_PAIR
{
BYTE nEncIndex[256]; // the Enclosure index, for non-SAS controller this field is always set to '0'
BYTE nDrvIndex[256]; // the Drive index
}sDEVICE_PAIR, *pDEVICE_PAIR;;;
*/
typedef struct _DEVICE_LIST
{
int total;
struct
{
BYTE nEncIndex; // the Enclosure index, for non-SAS controller this field is always set to '0'
BYTE nDrvIndex; // the Drive index
}device_pair[128];
}sDEVICE_LIST, *pDEVICE_LIST;
typedef struct _DRV_MAP
{
int total;
struct
{
BYTE encindex;
BYTE drvindex;
sGUI_PHY_DRV drvInfo;
}drv[128];
}sDRV_MAP, *pDRV_MAP;
typedef struct _VOL_MAP
{
int total;
struct
{
DWORD volindex;
sGUI_VOLUMESET volInfo;
}vol[128];
}sVOL_MAP, *pVOL_MAP;
typedef struct _RAID_MAP
{
int total;
struct
{
DWORD raidindex;
sGUI_RAIDSET raidInfo;
}raid[128];
}sRAID_MAP, *pRAID_MAP;
///////////////////////////////////////////////////////////////////////////////////
//
// CArclib definitions
// This class is exported from the Areca GUI library
//
#ifdef _WIN32
class ARCLIB_API CArclib
{
#else
class CArclib
{
#endif
// public constructors & destructors
public:
CArclib();
~CArclib();
// public member functions for raidsubsystem
public:
/************************************************************************************
Function Name: ArcGetLibVersion
Function: Get the areca library version
Input: None.
Output: None.
Return Values: 1. Library version
Note: None.
************************************************************************************/
static int ArcGetLibVersion
(
void
);
virtual ArcInterface *ArcGetInterface();
/************************************************************************************
Function Name: ArcInitSession
Function: Startup areca library by assigning an interface to it
Input: 1. ArcInterface
Output: None.
Return Values: 1. ARC_STATUS
Note: This function should be called before any member functions be called
************************************************************************************/
virtual ARC_STATUS ArcInitSession
(
IN ArcInterface *Interface
);
/************************************************************************************
Function Name: ArcGetSysInfo
Function: Get the RAID system information
Input: None.
Output: 1. Pointer to a sSYSTEM_INFO structure that receives the information.
Return Values: 1. ARC_STATUS
Note: 1. The memory allocation of the sSYSTEM_INFO structure is the
responsibility of the calling function.
************************************************************************************/
virtual ARC_STATUS ArcGetSysInfo
(
OUT pSYSTEM_INFO pSysInfo
);
/************************************************************************************
Function Name: ArcGetRaidSetInfo
Function: Get the RaidSet information
Input: 1. RaidSet number
Output: 1. Pointer to a sGUI_RAIDSET structure that receives the information.
Return Values: 1. ARC_STATUS
Note: 1. RaidSet number is started from 0 to sSYSTEM_INFO.gsiMaxRaidSet
2. The memory allocation of the sGUI_RAIDSET structure is the
responsibility of the calling function.
************************************************************************************/
virtual ARC_STATUS ArcGetRaidSetInfo
(
IN BYTE iRaidNumber,
OUT pGUI_RAIDSET pRaidInfo
);
/************************************************************************************
Function Name: ArcGetVolSetInfo
Function: Get the VolumeSet information
Input: 1. VolumeSet number
Output: 1. Pointer to a sGUI_VOLUMESET structure that receives the information.
Return Values: 1. ARC_STATUS
Note: 1. VolumeSet number is started from 0 to sSYSTEM_INFO.gsiMaxVolumeSet
2. The memory allocation of the sGUI_VOLUMESET structure is the
responsibility of the calling function.
************************************************************************************/
virtual ARC_STATUS ArcGetVolSetInfo
(
IN BYTE iVolNumber,
OUT pGUI_VOLUMESET pVolSet
);
/************************************************************************************
Function Name: ArcGetPhysicalDriveInfo
Function: Get the physical drive information
Input: 1. nDrvNum: Physical dirve number
Output: 1. Pointer to a sGUI_PHY_DRV structure that receives the information.
Return Values: 1. ARC_STATUS
Note: 1. Drive number is started from 0 to sSYSTEM_INFO.gsiIdeChannels
2. The memory allocation of the sGUI_PHY_DRV structure is the
responsibility of the calling function.
************************************************************************************/
virtual ARC_STATUS ArcGetPhysicalDriveInfo
(
IN BYTE nDrvNum,
OUT pGUI_PHY_DRV pPhyDrv
);
/************************************************************************************
Function Name: ArcGetHWMon
Function: Get the H/W monitor status
Input: 1. Hardware monitor item
Output: 1. Pointer to a sHwMonInfo structure that receives the information.
Return Values: 1. ARC_STATUS
Note: 1. HwItem is described by HWMON_ITEMS
2. The memory allocation of the sHwMonInfo structure is the
responsibility of the calling function.
************************************************************************************/
virtual ARC_STATUS ArcGetHWMon
(
IN DWORD HwItem,
OUT pHwMonInfo pHwInfo
);
/************************************************************************************
Function Name: ArcGetHWMon5010
Function: Get the H/W monitor status for 5010 & 6010 controller only
Input: None.
Output: 1. Pointer to a sHwMon5010 structure that receives the information.
Return Values: 1. ARC_STATUS
Note: 1. The memory allocation of the sHwMon5010 structure is the
responsibility of the calling function.
************************************************************************************/
virtual ARC_STATUS ArcGetHWMon5010
(
OUT pHwMon5010 pHwMon
);
/************************************************************************************
Function Name: ArcSetSerial
Function: Set serial number of RAID subsystem
Input: 1. Serial number(null terminate), Max 16 characters
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetSerial
(
IN char *szSerialNumber
);
/************************************************************************************
Function Name: ArcSetVendor
Function: Set vendor string of RAID subsystem
Input: 1. Vendor string(null-terminated), Max 40 characters
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetVendor
(
IN char *szVerdorName
);
/************************************************************************************
Function Name: ArcSetModel
Function: Set model string of RAID subsystem
Input: 1. Model string(null-terminated), Max 8 characters
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetModel
(
IN char *szModelName
);
/************************************************************************************
Function Name: ArcGetIdentifyString
Function: Get controller identify string
Input: None.
Output: 1. Pointer to a buffer that receives the information.
Return Values: 1. ARC_STATUS
Note: 1. The memory allocation of the buffer is the responsibility of the
calling function and the buffer must be >= 44 bytes
************************************************************************************/
virtual ARC_STATUS ArcGetIdentifyString
(
OUT char *strBuf
);
/************************************************************************************
Function Name: ARC_STATUS ArcIdentify(void)
Function: Identify controller
Input: None
Output: None
Return Values: 1. ARC_STATUS
Note: 1. If ARC_STATUS == ARC_SUCCESS then the controller found else
no controller found.
************************************************************************************/
virtual ARC_STATUS ArcIdentify
(
void
);
/************************************************************************************
Function Name: ArcMuteBeeper
Function: Mute the beeper
Input: None
Output: None
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled, use ArcChkPassword(...)
to validate the password.
************************************************************************************/
virtual ARC_STATUS ArcMuteBeeper
(
void
);
/************************************************************************************
Function Name: ArcSetBeeper
Function: Set the Beeper state
Input: 1. DISABLE or ENABLE
Output: None
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled, use ArcChkPassword(...)
to validate the password.
************************************************************************************/
virtual ARC_STATUS ArcSetBeeper
(
IN BYTE bSetting
);
/************************************************************************************
Function Name: ArcSetMacAddr
Function: Set MAC Address of RAID subsystem if ethernet supported
Input: 1. Standard MAC Address format, must be 6 byte characters.
Output: None
Return Values: 1. ARC_STATUS
Note: 1. Example of MAC Address format,
char mac[6] = { 0x00, 0x04, 0xD9, 0x60, 0x00, 0x00 };
************************************************************************************/
virtual ARC_STATUS ArcSetMacAddr
(
IN char *MacAddress
);
/************************************************************************************
Function Name: ArcSetLogo
Function: Set the OEM logo
Input: 1. The buffer contains the context of the image( .jpg or .gif )
2. The actually size of image, not the buffer size.
Output: None
Return Values: 1. ARC_STATUS
Note: 1. Image size must be <= 7998 bytes
2. The sequences of set logo:
2a. Read the image file from disk into the buffer that calling
function allocated.
2b. Pass the buffer and image size as the parameter into the
member function ArcSetLogo(...)
************************************************************************************/
virtual ARC_STATUS ArcSetLogo
(
IN char *imageBuf,
IN int imageSize
);
/************************************************************************************
Function Name: ArcSetTime
Function: The ArcSetTime method synchronizes the RAID subsystem data-time with
the host date-time.
Input: None
Output: None
Return Values: 1. ARC_STATUS
Note: None
************************************************************************************/
virtual ARC_STATUS ArcSetTime
(
void
);
/************************************************************************************
Function Name: ArcSNMP
Function: Query SNMP value with SNMP standard message ( BER encoding )
Input: 1. SNMP Message ( BER encoding )
2. Length of SNMP Message
Output: 1. SNMP Message returned from RAID subsystem ( BER encoding )
2. The length of returning SNMP message
Return Values: 1. ARC_STATUS
Note: 1. This member function is available if sSYSTEM_INFO.gsiRs232Snmp were true.
************************************************************************************/
virtual ARC_STATUS ArcSNMP
(
IN char *SNMPMsg,
IN int length,
OUT char *SNMPResponse,
OUT int *ResLength
);
/************************************************************************************
Function Name: ArcSNMPWithOid
Function: Query SNMP value with OID name
Input: 1. The OID from the NMS Request
2. Length of OID( both OID-IN and OID-OUT )
3. Community string
4. Exact ( if exact == 1 then SNMPGET else SNMPGETNEXT )
Output: 1. The OID returned from RAID-Subsystem
2. SNMP tag of the returning value
3. The answer of this OID
4. The length of this answer
Return Values: 1. ARC_STATUS
Note: 1. This member function is available if sSYSTEM_INFO.gsiRs232Snmp were true.
2. That length serve as a dual purpose in both IN and OUT.
3. The calling thread has the responsibility of freeing memory of var
which allocates by ArcSNMPWithOid(...)
************************************************************************************/
virtual ARC_STATUS ArcSNMPWithOid
(
IN OID *oid,
IN OUT int *length,
IN unsigned char *szCommunity,
OUT OID *ret_oid,
OUT unsigned char *tag,
OUT unsigned char **var,
OUT int *var_len,
IN unsigned char exact = 0 // default SNMPGETNEXT
);
/************************************************************************************
Function Name: ArcSetPassword
Function: Set the password of the RAID Subsystem
Input: 1. New password with null-terminated
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. New password string must be <= 15 characters
************************************************************************************/
virtual ARC_STATUS ArcSetPassword
(
IN char *szNewPasswordString
);
/************************************************************************************
Function Name: ArcSetHostMode
Function: Set host mode
Input: 0->Independent(RAID), 1->cluster(JBOD)
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcSetHostMode
(
IN BYTE bHostMode
);
/************************************************************************************
Function Name: ArcSetRebuildPriority
Function: Rebuild priority setting
Input: 0/1/2/3 (low->high)
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcSetRebuildPriority
(
IN BYTE bPriority
);
/************************************************************************************
Function Name: ArcSetMaxAtaMode
Function: Set max ATA or SATA mode
Input: IDE_SPEED_33 / IDE_SPEED_66 / IDE_SPEED_100 / IDE_SPEED_133 for IDE
SATA_SPEED_150 / SATA_SPEED_150NCQ / SATA_SPEED_300 / SATA_SPEED_300NCQ for SATA
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcSetMaxAtaMode
(
IN BYTE bMode
);
/************************************************************************************
Function Name: ArcSetDhcpIp
Function: Set DHCP and IP
Input: 1. 0:dhcp disabled, 1:dhcp enabled
2. Null-terminated character string representing a number expressed in the Internet standard "."
(dotted) notation, format: "xxx.xxx.xxx.xxx" ex: 192.168.001.100
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcSetDhcpIp
(
IN BYTE bDhcp,
IN PBYTE szIp
);
/************************************************************************************
Function Name: ArcSetRaidTermPort
Function: Set Raid Terminal Port
Input: 1. 0->COMA (term port), 1->COMB (debug port)
2. 0/1/2/3/4/5/6/7 (1200/2400/4800/9600/19200/38400/57600/115200)
3. stop bit (0:1, 1:2 stop bits)
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcSetTermPort
(
IN BYTE nPort,
IN BYTE nBaudRate,
IN BYTE nStopBit
);
/************************************************************************************
Function Name: ArcChkPassword
Function: Pass the password that user input to RAID Subsystem
Input: 1. Password with null-terminated
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password string must be <= 15 characters
************************************************************************************/
virtual ARC_STATUS ArcChkPassword
(
IN char *szPassword
);
/************************************************************************************
Function Name: ArcLogOut
Function: Logout GUI (force password checking on next command)
Input: None.
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcLogOut
(
void
);
/************************************************************************************
Function Name: ArcHttp
Function: Translates the HTTP data between BROWSER and RAID Subsystem
Input: 1. HTTP data from browser( HTML format )
2. The length of the HTTP data from browser
Output: 1. The HTTP data returned from RAID subsystem ( HTML format)
2. The Length of the returning HTTP data
Return Values: 1. ARC_STATUS
Note: 1. Sequence of translation.
1a. Setup the sockets for waiting connection from remote side.
1b. Receive the HTTP data from remote side.
1c. Pass the received data and length into ArcHttp.
1d. Send the HTTP data returned from RAID subsystem back to remote side.
************************************************************************************/
virtual ARC_STATUS ArcHttp
(
IN char *pClientHttpData,
IN int nClientHttpDataSize,
OUT char *pRaidReturnHttp,
OUT int *nRaidReturnSize
);
/************************************************************************************
Function Name: ArcPollEvent
Function: Get the current index of event object in the RAID subsystem
Input: None.
Output: 1. Pointer to an INTEGER to save the index of current event object
Return Values: 1. ARC_STATUS
Note: 1. There are 64 event objects inside the RAID subsystem
************************************************************************************/
virtual ARC_STATUS ArcPollEvent
(
OUT int *nCurrentEvtIndex
);
/************************************************************************************
Function Name: ArcGetReqEventPage
Function: Get the specific number of event pages from RAID subsystem
Input: 1. The flag to indicate how to retrieve the event object(s),
this parameter can be one of the following values:
1a. FLAG_ALL, retrieve all event objects inside the RAID subsystem
1b. FLAG_NEW, retrieve only new event objects
Output: 1. Number of event objects we retrieved
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcGetReqEventPage
(
IN char bFlag,
OUT int *iCount
);
/************************************************************************************
Function Name: ArcGetEventObject
Function: Get the individual event object
Input: 1. Event object index
Output: 1. Pointer to an sEVENT_DATA to save the current event object
Return Values: 1. boolean value, > 0 means successed
Note: 1.
************************************************************************************/
virtual BOOL ArcGetEventObject
(
IN int nEvtNum,
OUT pEVENT_DATA pEventObject
);
/************************************************************************************
Function Name: ArcClearEvent
Function: Clear all event buffer in the RAID subsystem
Input: None.
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcClearEvent
(
void
);
/************************************************************************************
Function Name: ArcCreateRaidSet
Function: Create RaidSet
Input: 1. Device mask, bit0 -- drive 0, bit1 -- drive 1 ....
ex: Device mask = 0x0000000F means that create raidset with device 0,1,2 and 3
2. RaidSet name ( <= 16 chars with null-terminated )
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcCreateRaidSet
(
IN DWORD nDevMask,
IN char *szRaidName
);
/************************************************************************************
Function Name: ArcDelRaidSet
Function: Delete the particular RaidSet
Input: 1. RaidSet number to specify which one to be deleted
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcDelRaidSet
(
IN char nRaidNum
);
/************************************************************************************
Function Name: ArcExpandRaidSet
Function: Expand RaidSet with volumeset(s) modification
Input: 1. RaidSet number to specify which one to be expanded
2. Device mask(see ArcCreateRaidSet(...))
3. The volumeset(s) will be modified
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcExpandRaidSet
(
IN BYTE nRaidNum,
IN DWORD nDevMask,
IN pVolModList volmodlist = NULL
);
/************************************************************************************
Function Name: ArcActiveRaidSet
Function: Activate incomplete raid set
Input: 1. RaidSet number to specify which one to be activated
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcActiveRaidSet
(
IN BYTE nRaidNum
);
/************************************************************************************
Function Name: ArcCreateHotSpare
Function: Create Hot Spare Disk
Input: 1. Device mask( see ArcCreateRaidSet(...))
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcCreateHotSpare
(
IN DWORD nDevMask
);
/************************************************************************************
Function Name: ArcDeleteHotSpare
Function: Delete Hot Spare Disk
Input: 1. Device mask(see ArcCreateRaidSet(...))
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcDeleteHotSpare
(
IN DWORD nDevMask
);
/************************************************************************************
Function Name: ArcCreateVolSet
Function: Create VolumeSet
Input: 1. Pointer to a sVolumeSetCap structure that uses to create VolumeSet
2. Specifies the type to create over 2TB volumeset.
TYPE_64BIT_LBA: 64bitLBA(default), TYPE_4K_FOR_WIN: 4KByte for Windows
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcCreateVolSet
(
IN pVolumeSetCap pVol,
IN BYTE Over2TBType = TYPE_64BIT_LBA
);
/************************************************************************************
Function Name: ArcModifyVolSet
Function: Modify VolumeSet
Input: 1. Pointer to a sNewVolumeSetCap structure that uses to modify VolumeSet
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcModifyVolSet
(
IN pNewVolumeSetCap pNewVol
);
/************************************************************************************
Function Name: ArcDelVolSet
Function: Delete VolumeSet
Input: 1. VolumeSet number to specify which one to be deleted
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcDelVolSet
(
IN BYTE nVolNum
);
/************************************************************************************
Function Name: ArcStartCheckVolume
Function: Start volume consistency check
Input: 1. Volume number to specify which one be checked
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcStartCheckVolume
(
IN BYTE nVolNum
);
/************************************************************************************
Function Name: ArcStopCheckVolume
Function: Stop volume consistency check
Input: None.
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcStopCheckVolume
(
void
);
/************************************************************************************
Function Name: ArcCreatePassthroughDisk
Function: Create pass-through disk
Input: 1. Pointer to a sPassDiskCap structure that uses to create pass-through Disk
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcCreatePassthroughDisk
(
IN pPassDiskCap pDisk
);
/************************************************************************************
Function Name: ArcModifyPassthroughDisk
Function: Modify pass-through disk
Input: 1. Pointer to a sPassDiskCap structure that uses to create pass-through Disk
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcModifyPassthroughDisk
(
IN pPassDiskCap pNewDiskCap
);
/************************************************************************************
Function Name: ArcDelPassthroughDisk
Function: Delete the pass-through disk
Input: 1. Disk number specify which one to be deleted
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcDelPassthroughDisk
(
IN BYTE nDrvNum
);
/************************************************************************************
Function Name: ArcIdentifyDisk
Function: Identify the disk
Input: 1. Device mask(see ArcCreateRaidSet(...))
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Set the Device mask to zero to stop the disk identifying.
2. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcIdentifyDisk
(
IN DWORD nDriveMask
);
/************************************************************************************
Function Name: ArcResetController
Function: Restart controller
Input: None.
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
2. After restart controller, it is essential to wait controller to
get ready, the time may be 10~60 seconds depends on the models
************************************************************************************/
virtual ARC_STATUS ArcResetController( void );
/************************************************************************************
Function Name: ArcUpdateFirmware
Function: Update firmware
Input: 1. The buffer contains the binary data of the firmware
2. The actually size of firmware, not the buffer size
Output: None
Return Values: 1. ARC_STATUS
Note:
************************************************************************************/
virtual ARC_STATUS ArcUpdateFirmware
(
IN char *fileBuf,
IN int fileSize
);
/************************************************************************************
Function Name: ArcUpdateFirmware
Function: Update firmware
Input: 1. The path that point to a firmware binary file
Output: None
Return Values: 1. ARC_STATUS
Note:
************************************************************************************/
virtual ARC_STATUS ArcUpdateFirmware
(
IN char *szFilePath
);
/************************************************************************************
Function Name: ArcGetOnBoardNetInfo
Function: Get On-Board network information
Input: 1. Pointer to a sNET_INFO structure that receives the information.
Output: None
Return Values: 1. ARC_STATUS
Note:
************************************************************************************/
virtual ARC_STATUS ArcGetOnBoardNetInfo
(
OUT pNET_INFO pNetInfo
);
/************************************************************************************
Function Name: ArcGetSystemConfigInfo
Function: Get the system configurations
Input: None.
Output: 1. Pointer to a sSYS_CONFIG_INFO structure that receives the information.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcGetSystemConfigInfo
(
OUT pSYS_CONFIG_INFO pSysCfgInfo
);
/************************************************************************************
Function Name: ArcSetStaggerPowerOn
Function: Set stagger poweron mode
Input: 1. Mode of the stagger poweron
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetStaggerPowerOn
(
IN BYTE nMode
);
/************************************************************************************
Function Name: ArcSetDiskCache
Function: Set disk cache mode
Input: 1. Mode of disk cache
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetDiskCache
(
IN BYTE nMode
);
/************************************************************************************
Function Name: ArcSetHddReadAhead
Function: Set HDD read-ahead mode
Input: 1. Mode of HDD read-ahead
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetHddReadAhead
(
IN BYTE nMode
);
/************************************************************************************
Function Name: ArcSetTruncateMode
Function: Set truncate mode
Input: 1. Mode of truncate
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetTruncateMode
(
IN BYTE nMode
);
/************************************************************************************
Function Name: ArcSetHTTPPort
Function: Set HTTP port
Input: 1. HTTP port number
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetHTTPPort
(
IN WORD nPort
);
/************************************************************************************
Function Name: ArcSetTelnetPort
Function: Set telnet port
Input: 1. Telnet port number
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetTelnetPort
(
IN WORD nPort
);
/************************************************************************************
Function Name: ArcSetSMTPPort
Function: Set SMTP port
Input: 1. SMTP port number
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetSMTPPort
(
IN WORD nPort
);
/************************************************************************************
Function Name: ArcSetAutoActivate
Function: Set Auto-Activate
Input: 1. Mode of auto-activate
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetAutoActivate
(
IN BYTE nMode
);
/************************************************************************************
Function Name: ArcSetSMARTHddPoll
Function: Set SMART HDD Poll Mode
Input: 1. Mode of SMART HDD poll
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetSMARTHddPoll
(
IN BYTE nMode
);
/************************************************************************************
Function Name: ArcSetHddSpinDownMode
Function: Set HDD spin down Mode
Input: 1. Mode of HDD spin down
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetHddSpinDownMode
(
IN BYTE nMode
);
/************************************************************************************
Function Name: ArcSetEmptyHddSlotLed
Function: Set empty HDD slot LED mode
Input: 1. Mode of empty HDD slot LED
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetEmptyHddSlotLed
(
IN BYTE nMode
);
/************************************************************************************
Function Name: ArcSetCpuFanDetect
Function: Set CPU fan detection mode
Input: 1. Mode of CPU detection mode
Output: None.
Return Values: 1. ARC_STATUS
Note: None.
************************************************************************************/
virtual ARC_STATUS ArcSetCpuFanDetection
(
IN BYTE nMode
);
/************************************************************************************
Function Name: IsEnclosure
Function:
Input: None
Output: None
Return Values: 'true' if the target subsystem is an Enclosure.
Note:
************************************************************************************/
BOOL IsEnclosure();
/************************************************************************************
Function Name: ArcGetEnclosureProperty
Function: Get the Enclosure property
Input: 1. encnum: Enclosure#
Output: 1. Pointer to a sGUI_ENC_PROPERTY structure that receives the information.
Return Values: ARC_STATUS
Note:
************************************************************************************/
virtual ARC_STATUS ArcGetEnclosureProperty
(
IN BYTE nEncnum,
OUT pGUI_ENC_PROPERTY pEncProperty
);
/************************************************************************************
Function Name: ArcGetEnclosureDescriptor
Function: Get the Enclosure descriptor
Input: 1. nEncnum: Enclosure#
2. nItem: see 'enum _SAS_HW'
3. nBufsize: the size of output buffer
Output: 1. pDescbuf: Pointer to a buffer that receives the item descriptor.
Return Values: ARC_STATUS
Note:
************************************************************************************/
virtual ARC_STATUS ArcGetEnclosureDescriptor
(
IN BYTE nEncnum,
IN BYTE nItem,
OUT BYTE *pDescbuf,
IN int nBufsize
);
/************************************************************************************
Function Name: ArcGetEnclosureHwMonitor
Function: Get the Enclosure H/W monitor
Input: 1. nEncnum: Enclosure#
Output: 1. Pointer to a sSENSORS structure that receives the information.
Return Values: ARC_STATUS
Note:
************************************************************************************/
virtual ARC_STATUS ArcGetEnclosureHwMonitor
(
IN BYTE nEncnum,
OUT pSENSORS pHwInfo
);
/************************************************************************************
Function Name: ArcGetPhysicalDriveInfo
Function: Get the physical drive information
Input: 1. nEncnum: Enclosure#
2. nDrvnum: Drive# in Enclsoure#
Output: 1. Pointer to a sGUI_PHY_DRV structure that receives the information.
Return Values: 1. ARC_STATUS
Note:
************************************************************************************/
virtual ARC_STATUS ArcGetPhysicalDriveInfo
(
IN BYTE nEncnum,
IN BYTE nDrvnum,
OUT pGUI_PHY_DRV pPhyDrv
);
/************************************************************************************
Function Name: ArcCreateRaidSet
Function: Create RaidSet
Input: 1. pDevPairList: Pointer to a sDEVICE_LIST structure containing a list
of devices
2. RaidSet name ( <= 16 chars with null-terminated )
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcCreateRaidSet
(
IN pDEVICE_LIST pDevPairList,
IN char *szRaidName
);
/************************************************************************************
Function Name: ArcExpandRaidSet
Function: Expand RaidSet With Volumeset(s) Modification
Input: 1. RaidSet number to specify which one to be expanded
2. pDevPairList: Pointer to a sDEVICE_LIST structure containing a list
of devices
3. The volumeset(s) that will be modified
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcExpandRaidSet
(
IN BYTE nRaidNum,
IN pDEVICE_LIST pDevPairList,
IN pVolModList volmodlist = NULL
);
/************************************************************************************
Function Name: ArcCreateHotSpare
Function: Create Hot Spare Disk
Input: 1. pDevPairList: Pointer to a sDEVICE_LIST structure containing a list
of devices
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcCreateHotSpare
(
IN pDEVICE_LIST pDevPairList
);
/************************************************************************************
Function Name: ArcDeleteHotSpare
Function: Delete Hot Spare Disk
Input: 1. pDevPairList: Pointer to a sDEVICE_LIST structure containing a list
of devices
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcDeleteHotSpare
(
IN pDEVICE_LIST pDevPairList
);
/************************************************************************************
Function Name: ArcCreatePassthroughDisk
Function: Create Pass-Through Disk
Input: 1. nEncnum: Enclosure#
2. nDrvnum: Drive# in Enclsoure#
3. pDisk: Pointer to a sPassDiskCap structure that uses to create pass-through Disk
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. This function use the nDrvnum instead of pDisk->nDevNum
2. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcCreatePassthroughDisk
(
IN BYTE nEncnum,
IN BYTE nDrvnum,
IN pPassDiskCap pDisk
);
/************************************************************************************
Function Name: ArcModifyPassthroughDisk
Function: Modify Pass-Through Disk
Input: 1. nEncnum: Enclosure#
2. nDrvnum: Drive# in Enclsoure#
3. pNewDiskCap: Pointer to a sPassDiskCap structure that uses to create pass-through Disk
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. This function use the nDrvnum instead of pNewDiskCap->nDevNum
2. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcModifyPassthroughDisk
(
IN BYTE nEncnum,
IN BYTE nDrvnum,
IN pPassDiskCap pNewDiskCap
);
/************************************************************************************
Function Name: ArcDelPassthroughDisk
Function: Delete Pass-Through Disk
Input: 1. nEncnum: Enclosure#
2. nDrvnum: Drive# in Enclsoure#
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcDelPassthroughDisk
(
IN BYTE nEncnum,
IN BYTE nDrvnum
);
/************************************************************************************
Function Name: ArcSASIdentifyDisk
Function: Identify the disk
Input: 1. nTarget: The target to be identified.
2. nEncnum: Enclosure#
3. nDrvnum: Drive# in Enclsoure#
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Set the Device mask to zero to stop the disk identifying.
2. Password required if password enabled
************************************************************************************/
enum _IDENTIFY_TARGET
{
TARGET_DRIVE = 0, // the target is disk
TARGET_ENCLOSURE, // the target is enclosure
TARGET_OFF, // end identifying
TARGET_ALL
};
virtual ARC_STATUS ArcSASIdentifyDisk
(
IN BYTE nTarget,
IN BYTE nEncnum = 0xFF,
IN BYTE nDrvnum = 0xFF
);
/************************************************************************************
Function Name: ArcCreateVolSetR5060
Function: Create Raid30/50/60 VolumeSet
Input: 1. nRaidNumber: Number of RaidSets use to create Raid30/50/60
VolumeSet
2. nRaidArray: Pointer to an array containing index of RaidSets
3. Pointer to a sVolumeSetCap structure that uses to create VolumeSet
4. Specifies the type to create over 2TB volumeset.
TYPE_64BIT_LBA: 64bitLBA(default), TYPE_4K_FOR_WIN: 4KByte for Windows
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcCreateVolSetR5060
(
IN BYTE nRaidNumber,
IN BYTE nRaidArray[],
IN pVolumeSetCap pVol,
IN BYTE Over2TBType = TYPE_64BIT_LBA
);
//////////////////////////////////////////
////// MAIL Functions ////////////
//////////////////////////////////////////
/************************************************************************************
Function Name: ArcGetMailInfo
Function: Get the mail notification information
Input: None.
Output: 1. Pointer to a sMAIL_INFO structure that receives the information.
Return Values: ARC_STATUS
Note:
************************************************************************************/
virtual ARC_STATUS ArcGetMailInfo
(
OUT pMAIL_INFO pMailInfo
);
virtual ARC_STATUS ArcSetMailSmtpIp
(
IN char *szSmtpIp // format: string with null-terminated "192.168.0.1"
);
virtual ARC_STATUS ArcSetMailSmtpLoginAccount
(
IN char *szName, // SMTP server login name
IN char *szPassword // SMTP server login password
);
enum _MAIL_ADDR_ITEM
{
MAIL_ITEM_SENDER,
MAIL_ITEM_MAILTO1,
MAIL_ITEM_MAILTO2,
MAIL_ITEM_MAILTO3,
MAIL_ITEM_MAILTO4,
TOTAL_MAIL_ITEM
};
virtual ARC_STATUS ArcSetMailAddr
(
IN DWORD nItem, // enum _MAIL_ADDR_ITEM
IN pMAIL_ADDR pMail
);
virtual ARC_STATUS ArcSetMailEvtLevel
(
DWORD nEvtLevel // enum _EVT_LEVEL
);
virtual ARC_STATUS ArcSetMailNoEvtFor24Hours
(
DWORD nNotificationForNoEvent // default enabled
);
//////////////////////////////////////////////
////////// SNMP Functions ////////////
//////////////////////////////////////////////
/************************************************************************************
Function Name: ArcGetSnmpInfo
Function: Get the SNMP notification information
Input: None.
Output: 1. Pointer to a sSNMP_CONFIG structure that receives the information.
Return Values: ARC_STATUS
Note:
************************************************************************************/
virtual ARC_STATUS ArcGetSnmpInfo
(
OUT pSNMP_CONFIG pSnmpInfo
);
enum _SNMP_TRAP_IP_ITEM
{
SNMP_TRAP_IP1,
SNMP_TRAP_IP2,
SNMP_TRAP_IP3,
TOTAL_SNMP_TRAP_IP
};
virtual ARC_STATUS ArcSetSnmpTrapIp
(
IN DWORD nItem, // enum _SNMP_TRAP_IP_ITEM
char *szIp
);
enum _SNMP_TRAP_PORT_ITEM
{
SNMP_TRAP_PORT1,
SNMP_TRAP_PORT2,
SNMP_TRAP_PORT3,
TOTAL_SNMP_TRAP_PORT
};
virtual ARC_STATUS ArcSetSnmpTrapPort
(
IN DWORD nItem, // enum _SNMP_TRAP_PORT_ITEM
WORD port
);
virtual ARC_STATUS ArcSetSnmpCommunity
(
IN char *szCommunity // SNMP community string with null-terminated
);
virtual ARC_STATUS ArcSetSnmpContact
(
IN char *szContact // contact string with null-terminated
);
virtual ARC_STATUS ArcSetSnmpName
(
IN char *szName // name string with null-terminated
);
virtual ARC_STATUS ArcSetSnmpLocation
(
IN char *szLocation // location string with null-terminated
);
virtual ARC_STATUS ArcSetSnmpEvtLevel
(
DWORD nEvtLevel // enum _EVT_LEVEL
);
/************************************************************************************
Function Name: ArcSetGatewayIp
Function: Set Gateway IP
Input: 1. Null-terminated character string representing a number expressed in the Internet standard "."
(dotted) notation, format: "xxx.xxx.xxx.xxx" ex: 192.168.001.100
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcSetGatewayIp
(
IN char *szGatewayIp
);
/************************************************************************************
Routine Name: ArcOfflineRaidSet
Function: Offline the particular RaidSet
Input: 1. RaidSet number
Output: None.
Return Values: 1. ARC_STATUS
Note: 1. Password required if password enabled
************************************************************************************/
virtual ARC_STATUS ArcOfflineRaidSet
(
IN char nRaidNum
);
public:
ARC_STATUS ArcCmdReadWrite(BYTE cmd, void *w_buf, int w_buf_len, void *r_buf, int r_buf_len, int &actual_read_size, DWORD flag = 0);
//
// helper function
//
ARC_STATUS ArcHelpBuildDeviceMap(sDRV_MAP *drvMap); // enumerating disk
ARC_STATUS ArcHelpBuildRaidSetMap(sRAID_MAP *raidMap); // enumerating raidset
ARC_STATUS ArcHelpBuildVolumeSetMap(sVOL_MAP *volMap); // enumerating volumeset
protected:
ARC_STATUS ArcGetEvent(char nPage);
ARC_STATUS SetLogoPage(BYTE nPage, BYTE *Data, int len);
ARC_STATUS ArcGetSetupPage(BYTE *buf, int bufsize);
ARC_STATUS ArcWriteSetupData(int setupitem, char *data, int datalen);
ARC_STATUS ArcReadSetupData(int setupitem, char *buf, int buflen, int *retlen);
ARC_STATUS ArcGetModelNumber(DWORD *model);
//BOOL ArcCkFrameValid(PBYTE frame, DWORD dwLength);
//BYTE CalCheckSum( PBYTE src, int len);
BOOL IsValidHandle();
int DetermineTableNumber();
ArcInterface *m_Interface; // The communication path to the raid-subsystem
sSYSTEM_INFO m_SysInfo;
private:
// save the previous index of event
int m_iPreIndex;
// save the current index of event
int m_iCurrentIndex;
int m_iNewCount;
BYTE *m_pEventPage;
BYTE *m_pEventMapping;
int m_iMtu;
};
#pragma pack()
#ifdef __cplusplus
}
#endif
#endif // # _ARCLIB_H