1fcf3ce44SJohn Forte /* 2fcf3ce44SJohn Forte * Description 3fcf3ce44SJohn Forte * ImaLib.c - Implements a sample common IMA library 4fcf3ce44SJohn Forte * 5fcf3ce44SJohn Forte * License: 6fcf3ce44SJohn Forte * The contents of this file are subject to the SNIA Public License 7fcf3ce44SJohn Forte * Version 1.0(the "License"); you may not use this file except in 8fcf3ce44SJohn Forte * compliance with the License. You may obtain a copy of the License at 9fcf3ce44SJohn Forte * 10fcf3ce44SJohn Forte * /http://www.snia.org/English/Resources/Code/OpenSource.html 11fcf3ce44SJohn Forte * 12fcf3ce44SJohn Forte * Software distributed under the License is distributed on an "AS IS" 13fcf3ce44SJohn Forte * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 14fcf3ce44SJohn Forte * the License for the specific language governing rights and limitations 15fcf3ce44SJohn Forte * under the License. 16fcf3ce44SJohn Forte * 17fcf3ce44SJohn Forte * The Original Code is SNIA HBA API and IMA general header file 18fcf3ce44SJohn Forte * 19fcf3ce44SJohn Forte * The Initial Developer of the Original Code is: 20fcf3ce44SJohn Forte * Benjamin F. Kuo, Troika Networks, Inc. (benk@troikanetworks.com) 21fcf3ce44SJohn Forte * David Dillard VERITAS Software david.dillard@veritas.com 22fcf3ce44SJohn Forte * 23fcf3ce44SJohn Forte * Contributor(s): 24fcf3ce44SJohn Forte * Jeff Ding, Adaptec, Inc. (jding@corp.adaptec.com) 25fcf3ce44SJohn Forte * 26fcf3ce44SJohn Forte * Changes: 27fcf3ce44SJohn Forte * 09/24/2003 Initial Draft 28fcf3ce44SJohn Forte * (for other changes... see the CVS logs) 29fcf3ce44SJohn Forte * 30fcf3ce44SJohn Forte * 12/15/2003 corrected the defined parameter in IMA_SetPhbaIsnsDiscovery(). 31fcf3ce44SJohn Forte * lower case the computer name as iscsi name in IMA_GenerateNodeName(). 32fcf3ce44SJohn Forte * 33fcf3ce44SJohn Forte * 01/21/2005 Updated to support IMA 1.1.3. 34fcf3ce44SJohn Forte */ 35fcf3ce44SJohn Forte 36fcf3ce44SJohn Forte #ifdef WIN32 37fcf3ce44SJohn Forte #include <windows.h> 38fcf3ce44SJohn Forte #else 39fcf3ce44SJohn Forte #include <sys/sem.h> 40fcf3ce44SJohn Forte #include <dlfcn.h> 41fcf3ce44SJohn Forte #include <stdarg.h> 42fcf3ce44SJohn Forte #endif 43fcf3ce44SJohn Forte 44fcf3ce44SJohn Forte #include <string.h> 45*5d539a8eSMatt Barden #include <strings.h> 46fcf3ce44SJohn Forte #include <stdlib.h> 47fcf3ce44SJohn Forte // #include <sys/sem.h> 48*5d539a8eSMatt Barden #include <unistd.h> 49fcf3ce44SJohn Forte #include <time.h> 50fcf3ce44SJohn Forte #include <stdio.h> 51fcf3ce44SJohn Forte #include <sys/types.h> 52fcf3ce44SJohn Forte // #include <sys/ipc.h> 53*5d539a8eSMatt Barden #include <netdb.h> 54fcf3ce44SJohn Forte 55aff4bce5Syi zhang - Sun Microsystems - Beijing China #include "libsun_ima.h" 56fcf3ce44SJohn Forte #include "ima.h" 57fcf3ce44SJohn Forte #include "ima-plugin.h" 58fcf3ce44SJohn Forte 59fcf3ce44SJohn Forte 60fcf3ce44SJohn Forte #define LIBRARY_PROPERTY_SUPPORTED_IMA_VERSION 1 61fcf3ce44SJohn Forte #define LIBRARY_PROPERTY_IMPLEMENTATION_VERSION L"1.0.2" 62fcf3ce44SJohn Forte #define LIBRARY_PROPERTY_VENDOR L"QLogic, Inc." 63fcf3ce44SJohn Forte #define DEFAULT_NODE_NAME_FORMAT "iqn.1986-03.com.sun.central.%s" 64fcf3ce44SJohn Forte 65fcf3ce44SJohn Forte /* Linux only */ 66fcf3ce44SJohn Forte #define LIBRARY_FILE_NAME L"libima.so" 67fcf3ce44SJohn Forte 68fcf3ce44SJohn Forte #define EUOS_ERROR IMA_ERROR_UNEXPECTED_OS_ERROR 69fcf3ce44SJohn Forte 70aff4bce5Syi zhang - Sun Microsystems - Beijing China IMA_PLUGIN_INFO plugintable[IMA_MAX_NUM_PLUGINS]; 71aff4bce5Syi zhang - Sun Microsystems - Beijing China int number_of_plugins = -1; 72fcf3ce44SJohn Forte static IMA_NODE_NAME sharedNodeName; 73fcf3ce44SJohn Forte static IMA_NODE_ALIAS sharedNodeAlias; 74fcf3ce44SJohn Forte 75fcf3ce44SJohn Forte #ifdef WIN32 76fcf3ce44SJohn Forte static HANDLE libMutex = NULL; 77fcf3ce44SJohn Forte #else 78aff4bce5Syi zhang - Sun Microsystems - Beijing China int libMutex = -1; 79fcf3ce44SJohn Forte #endif 80fcf3ce44SJohn Forte 81fcf3ce44SJohn Forte void InitLibrary(); 82fcf3ce44SJohn Forte void ExitLibrary(); 83fcf3ce44SJohn Forte 84fcf3ce44SJohn Forte static void libSwprintf(wchar_t *wcs, const wchar_t *lpszFormat, ...) { 85fcf3ce44SJohn Forte va_list args; 86fcf3ce44SJohn Forte va_start(args, lpszFormat); 87fcf3ce44SJohn Forte 88fcf3ce44SJohn Forte #ifdef WIN32 89fcf3ce44SJohn Forte vswprintf(wcs, lpszFormat, args); 90fcf3ce44SJohn Forte #else 91fcf3ce44SJohn Forte vswprintf(wcs, 255, lpszFormat, args); 92fcf3ce44SJohn Forte #endif 93fcf3ce44SJohn Forte va_end(args); 94fcf3ce44SJohn Forte } 95fcf3ce44SJohn Forte 96fcf3ce44SJohn Forte 97fcf3ce44SJohn Forte #ifdef WIN32 98fcf3ce44SJohn Forte /* Begin implementation */ 99fcf3ce44SJohn Forte BOOL APIENTRY DllMain(HANDLE hModule, 100fcf3ce44SJohn Forte DWORD ul_reason_for_call, 101fcf3ce44SJohn Forte LPVOID lpReserved) { 102fcf3ce44SJohn Forte switch (ul_reason_for_call) { 103fcf3ce44SJohn Forte 104fcf3ce44SJohn Forte case DLL_PROCESS_ATTACH: 105fcf3ce44SJohn Forte // InitLibrary(); 106fcf3ce44SJohn Forte break; 107fcf3ce44SJohn Forte case DLL_PROCESS_DETACH: 108fcf3ce44SJohn Forte ExitLibrary(); 109fcf3ce44SJohn Forte break; 110fcf3ce44SJohn Forte case DLL_THREAD_ATTACH: 111fcf3ce44SJohn Forte case DLL_THREAD_DETACH: 112fcf3ce44SJohn Forte break; 113fcf3ce44SJohn Forte } 114fcf3ce44SJohn Forte return (TRUE); 115fcf3ce44SJohn Forte } 116fcf3ce44SJohn Forte #elif defined(SOLARIS) 117fcf3ce44SJohn Forte 118fcf3ce44SJohn Forte void so_init(void); 119fcf3ce44SJohn Forte void so_fini(void); 120fcf3ce44SJohn Forte static int os_createmutex(int *semid); 121fcf3ce44SJohn Forte static void os_obtainmutex(int semid); 122fcf3ce44SJohn Forte static void os_releasemutex(int semid); 123fcf3ce44SJohn Forte static void os_destroymutex(int semid); 124fcf3ce44SJohn Forte static IMA_STATUS getSolarisNodeProps(IMA_NODE_PROPERTIES *nodeProps); 125fcf3ce44SJohn Forte static IMA_STATUS getSolarisSharedNodeName(IMA_NODE_NAME name); 126fcf3ce44SJohn Forte static IMA_STATUS getSolarisSharedNodeAlias(IMA_NODE_ALIAS alias); 127fcf3ce44SJohn Forte static IMA_STATUS setSolarisSharedNodeName(const IMA_NODE_NAME name); 128fcf3ce44SJohn Forte static IMA_STATUS setSolarisSharedNodeAlias(const IMA_NODE_ALIAS alias); 129fcf3ce44SJohn Forte 130fcf3ce44SJohn Forte #pragma init(so_init) 131fcf3ce44SJohn Forte #pragma fini(so_fini) 132fcf3ce44SJohn Forte 133fcf3ce44SJohn Forte void so_init() { 134fcf3ce44SJohn Forte InitLibrary(); 135fcf3ce44SJohn Forte } 136fcf3ce44SJohn Forte void so_fini() { 137fcf3ce44SJohn Forte ExitLibrary(); 138fcf3ce44SJohn Forte } 139fcf3ce44SJohn Forte 140fcf3ce44SJohn Forte static IMA_STATUS getSolarisNodeProps(IMA_NODE_PROPERTIES *nodeProps) { 141fcf3ce44SJohn Forte int ret; 142fcf3ce44SJohn Forte int i; 143fcf3ce44SJohn Forte IMA_STATUS status = IMA_ERROR_UNKNOWN_ERROR; 144fcf3ce44SJohn Forte IMA_GetNodePropertiesFn PassFunc; 145fcf3ce44SJohn Forte IMA_OID nodeOid; 146fcf3ce44SJohn Forte 147fcf3ce44SJohn Forte if (number_of_plugins == -1) 148fcf3ce44SJohn Forte InitLibrary(); 149fcf3ce44SJohn Forte 150fcf3ce44SJohn Forte os_obtainmutex(libMutex); 151fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 152fcf3ce44SJohn Forte 153fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 154fcf3ce44SJohn Forte if (strstr(plugintable[i].PluginPath, 155fcf3ce44SJohn Forte "libsun_ima.so") == NULL) { 156fcf3ce44SJohn Forte continue; 157fcf3ce44SJohn Forte } 158fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 159fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 160fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 161fcf3ce44SJohn Forte PassFunc = 162fcf3ce44SJohn Forte (IMA_GetNodePropertiesFn) dlsym( 163fcf3ce44SJohn Forte plugintable[i].hPlugin, 164fcf3ce44SJohn Forte "IMA_GetNodeProperties"); 165fcf3ce44SJohn Forte if (PassFunc != NULL) { 166fcf3ce44SJohn Forte status = PassFunc(nodeOid, nodeProps); 167fcf3ce44SJohn Forte } 168fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 169fcf3ce44SJohn Forte } 170fcf3ce44SJohn Forte break; 171fcf3ce44SJohn Forte } 172fcf3ce44SJohn Forte 173fcf3ce44SJohn Forte os_releasemutex(libMutex); 174fcf3ce44SJohn Forte return (status); 175fcf3ce44SJohn Forte } 176fcf3ce44SJohn Forte 177fcf3ce44SJohn Forte static IMA_STATUS getSolarisSharedNodeName(IMA_NODE_NAME name) { 178fcf3ce44SJohn Forte IMA_STATUS status = IMA_ERROR_UNKNOWN_ERROR; 179fcf3ce44SJohn Forte IMA_NODE_PROPERTIES nodeProps; 180fcf3ce44SJohn Forte 181fcf3ce44SJohn Forte status = getSolarisNodeProps(&nodeProps); 182fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 183fcf3ce44SJohn Forte return (status); 184fcf3ce44SJohn Forte } 185fcf3ce44SJohn Forte bcopy(&nodeProps.name, name, sizeof (IMA_NODE_NAME)); 186fcf3ce44SJohn Forte return (status); 187fcf3ce44SJohn Forte } 188fcf3ce44SJohn Forte 189fcf3ce44SJohn Forte static IMA_STATUS getSolarisSharedNodeAlias(IMA_NODE_ALIAS alias) { 190fcf3ce44SJohn Forte IMA_STATUS status = IMA_ERROR_UNKNOWN_ERROR; 191fcf3ce44SJohn Forte IMA_NODE_PROPERTIES nodeProps; 192fcf3ce44SJohn Forte 193fcf3ce44SJohn Forte status = getSolarisNodeProps(&nodeProps); 194fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 195fcf3ce44SJohn Forte return (status); 196fcf3ce44SJohn Forte } 197fcf3ce44SJohn Forte bcopy(&nodeProps.alias, alias, sizeof (IMA_NODE_ALIAS)); 198fcf3ce44SJohn Forte return (status); 199fcf3ce44SJohn Forte } 200fcf3ce44SJohn Forte 201fcf3ce44SJohn Forte static IMA_STATUS setSolarisSharedNodeName(const IMA_NODE_NAME name) { 202fcf3ce44SJohn Forte int ret; 203fcf3ce44SJohn Forte int i; 204fcf3ce44SJohn Forte IMA_STATUS status = IMA_ERROR_UNKNOWN_ERROR; 205fcf3ce44SJohn Forte IMA_NODE_PROPERTIES nodeProps; 206fcf3ce44SJohn Forte IMA_SetNodeNameFn PassFunc; 207fcf3ce44SJohn Forte IMA_OID nodeOid; 208fcf3ce44SJohn Forte 209fcf3ce44SJohn Forte if (number_of_plugins == -1) 210fcf3ce44SJohn Forte InitLibrary(); 211fcf3ce44SJohn Forte 212fcf3ce44SJohn Forte os_obtainmutex(libMutex); 213fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 214fcf3ce44SJohn Forte 215fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 216fcf3ce44SJohn Forte if (strstr(plugintable[i].PluginPath, 217fcf3ce44SJohn Forte "libsun_ima.so") == NULL) { 218fcf3ce44SJohn Forte continue; 219fcf3ce44SJohn Forte } 220fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 221fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 222fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 223fcf3ce44SJohn Forte PassFunc = 224fcf3ce44SJohn Forte (IMA_SetNodeNameFn) dlsym(plugintable[i].hPlugin, 225fcf3ce44SJohn Forte "IMA_SetNodeName"); 226fcf3ce44SJohn Forte if (PassFunc != NULL) { 227fcf3ce44SJohn Forte status = PassFunc(nodeOid, name); 228fcf3ce44SJohn Forte } 229fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 230fcf3ce44SJohn Forte } 231fcf3ce44SJohn Forte break; 232fcf3ce44SJohn Forte } 233fcf3ce44SJohn Forte 234fcf3ce44SJohn Forte os_releasemutex(libMutex); 235fcf3ce44SJohn Forte return (status); 236fcf3ce44SJohn Forte } 237fcf3ce44SJohn Forte 238fcf3ce44SJohn Forte static IMA_STATUS setSolarisSharedNodeAlias(const IMA_NODE_ALIAS alias) { 239fcf3ce44SJohn Forte int ret; 240fcf3ce44SJohn Forte int i; 241fcf3ce44SJohn Forte IMA_STATUS status = IMA_ERROR_UNKNOWN_ERROR; 242fcf3ce44SJohn Forte IMA_NODE_PROPERTIES nodeProps; 243fcf3ce44SJohn Forte IMA_SetNodeAliasFn PassFunc; 244fcf3ce44SJohn Forte IMA_OID nodeOid; 245fcf3ce44SJohn Forte 246fcf3ce44SJohn Forte if (number_of_plugins == -1) 247fcf3ce44SJohn Forte InitLibrary(); 248fcf3ce44SJohn Forte 249fcf3ce44SJohn Forte os_obtainmutex(libMutex); 250fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 251fcf3ce44SJohn Forte 252fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 253fcf3ce44SJohn Forte if (strstr(plugintable[i].PluginPath, 254fcf3ce44SJohn Forte "libsun_ima.so") == NULL) { 255fcf3ce44SJohn Forte continue; 256fcf3ce44SJohn Forte } 257fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 258fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 259fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 260fcf3ce44SJohn Forte PassFunc = 261fcf3ce44SJohn Forte (IMA_SetNodeAliasFn) dlsym(plugintable[i].hPlugin, 262fcf3ce44SJohn Forte "IMA_SetNodeAlias"); 263fcf3ce44SJohn Forte if (PassFunc != NULL) { 264fcf3ce44SJohn Forte status = PassFunc(nodeOid, alias); 265fcf3ce44SJohn Forte } 266fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 267fcf3ce44SJohn Forte } 268fcf3ce44SJohn Forte break; 269fcf3ce44SJohn Forte } 270fcf3ce44SJohn Forte 271fcf3ce44SJohn Forte os_releasemutex(libMutex); 272fcf3ce44SJohn Forte return (status); 273fcf3ce44SJohn Forte } 274fcf3ce44SJohn Forte 275fcf3ce44SJohn Forte #else 276fcf3ce44SJohn Forte /* 277fcf3ce44SJohn Forte * add code in .init and .fini, 278fcf3ce44SJohn Forte * "__attribute__ ((constructor))" and "__attribute__ ((destructor))" 279fcf3ce44SJohn Forte * are used with gcc 280fcf3ce44SJohn Forte */ 281fcf3ce44SJohn Forte __attribute__((constructor)) void init() { 282fcf3ce44SJohn Forte InitLibrary(); 283fcf3ce44SJohn Forte } 284fcf3ce44SJohn Forte 285fcf3ce44SJohn Forte __attribute__((destructor)) void fini() { 286fcf3ce44SJohn Forte ExitLibrary(); 287fcf3ce44SJohn Forte } 288fcf3ce44SJohn Forte 289fcf3ce44SJohn Forte #endif 290fcf3ce44SJohn Forte 291fcf3ce44SJohn Forte 292fcf3ce44SJohn Forte #ifdef WIN32 293fcf3ce44SJohn Forte 294fcf3ce44SJohn Forte static BOOL os_createmutex(HANDLE Mutex) { 295fcf3ce44SJohn Forte Mutex = CreateMutex(NULL, FALSE, NULL); 296fcf3ce44SJohn Forte 297fcf3ce44SJohn Forte if (Mutex == NULL) { 298fcf3ce44SJohn Forte return (FALSE); 299fcf3ce44SJohn Forte } 300fcf3ce44SJohn Forte 301fcf3ce44SJohn Forte return (TRUE); 302fcf3ce44SJohn Forte } 303fcf3ce44SJohn Forte 304fcf3ce44SJohn Forte static void os_destroymutex(HANDLE Mutex) { 305fcf3ce44SJohn Forte if (Mutex != NULL) { 306fcf3ce44SJohn Forte CloseHandle(Mutex); 307fcf3ce44SJohn Forte } 308fcf3ce44SJohn Forte } 309fcf3ce44SJohn Forte 310fcf3ce44SJohn Forte 311fcf3ce44SJohn Forte static void os_obtainmutex(HANDLE Mutex) { 312fcf3ce44SJohn Forte WaitForSingleObject(Mutex, INFINITE); 313fcf3ce44SJohn Forte } 314fcf3ce44SJohn Forte 315fcf3ce44SJohn Forte static void os_releasemutex(HANDLE Mutex) { 316fcf3ce44SJohn Forte ReleaseMutex(Mutex); 317fcf3ce44SJohn Forte } 318fcf3ce44SJohn Forte 319fcf3ce44SJohn Forte #else 320fcf3ce44SJohn Forte #if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED) 321fcf3ce44SJohn Forte /* <sys/sem.h> */ 322fcf3ce44SJohn Forte #else 323fcf3ce44SJohn Forte union semun { 324fcf3ce44SJohn Forte int val; /* value for SETVAL */ 325fcf3ce44SJohn Forte struct semid_ds *bf; /* buffer for IPC_STAT, IPC_SET */ 326fcf3ce44SJohn Forte unsigned short int *array; /* array for GETALL, SETALL */ 327fcf3ce44SJohn Forte struct seminfo *__buf; /* buffer for IPC_INFO */ 328fcf3ce44SJohn Forte }; 329fcf3ce44SJohn Forte #endif 330fcf3ce44SJohn Forte 331fcf3ce44SJohn Forte /* Create the semaphore. Return 1 if successful, 0 otherwise */ 332fcf3ce44SJohn Forte static int os_createmutex(int *semid) { 333fcf3ce44SJohn Forte int retVal; 334fcf3ce44SJohn Forte union semun sem_union; 335fcf3ce44SJohn Forte 336fcf3ce44SJohn Forte if (semid == NULL) { 337fcf3ce44SJohn Forte return (0); 338fcf3ce44SJohn Forte } 339fcf3ce44SJohn Forte 340fcf3ce44SJohn Forte retVal = semget(IPC_PRIVATE, 1, IPC_CREAT); 341fcf3ce44SJohn Forte if (retVal == -1) { 342fcf3ce44SJohn Forte return (0); 343fcf3ce44SJohn Forte } 344fcf3ce44SJohn Forte 345fcf3ce44SJohn Forte *semid = retVal; /* save key of created semaphore */ 346fcf3ce44SJohn Forte sem_union.val = 1; /* start semaphore off signaled */ 347fcf3ce44SJohn Forte retVal = semctl(*semid, 0, SETVAL, sem_union); 348fcf3ce44SJohn Forte if (retVal == -1) { 349fcf3ce44SJohn Forte return (0); 350fcf3ce44SJohn Forte } 351fcf3ce44SJohn Forte 352fcf3ce44SJohn Forte return (1); 353fcf3ce44SJohn Forte } 354fcf3ce44SJohn Forte 355fcf3ce44SJohn Forte static void os_obtainmutex(int semid) { 356fcf3ce44SJohn Forte int retVal; 357fcf3ce44SJohn Forte struct sembuf sem_b; 358fcf3ce44SJohn Forte 359fcf3ce44SJohn Forte sem_b.sem_num = 0; 360fcf3ce44SJohn Forte sem_b.sem_op = -1; 361fcf3ce44SJohn Forte sem_b.sem_flg = SEM_UNDO; 362fcf3ce44SJohn Forte retVal = semop(semid, &sem_b, 1); 363fcf3ce44SJohn Forte 364fcf3ce44SJohn Forte } 365fcf3ce44SJohn Forte 366fcf3ce44SJohn Forte static void os_releasemutex(int semid) { 367fcf3ce44SJohn Forte int retVal; 368fcf3ce44SJohn Forte struct sembuf sem_b; 369fcf3ce44SJohn Forte 370fcf3ce44SJohn Forte sem_b.sem_num = 0; 371fcf3ce44SJohn Forte sem_b.sem_op = 1; 372fcf3ce44SJohn Forte sem_b.sem_flg = SEM_UNDO; 373fcf3ce44SJohn Forte retVal = semop(semid, &sem_b, 1); 374fcf3ce44SJohn Forte 375fcf3ce44SJohn Forte } 376fcf3ce44SJohn Forte 377fcf3ce44SJohn Forte /* Destroy the SNMP semaphore. */ 378fcf3ce44SJohn Forte static void os_destroymutex(int semid) { 379fcf3ce44SJohn Forte int retVal; 380fcf3ce44SJohn Forte union semun sem_union; 381fcf3ce44SJohn Forte 382fcf3ce44SJohn Forte retVal = semctl(semid, 0, IPC_RMID, sem_union); 383fcf3ce44SJohn Forte 384fcf3ce44SJohn Forte } 385fcf3ce44SJohn Forte #endif 386fcf3ce44SJohn Forte 387fcf3ce44SJohn Forte 388fcf3ce44SJohn Forte void InitLibrary() { 389fcf3ce44SJohn Forte 390fcf3ce44SJohn Forte FILE *imaconf; 391fcf3ce44SJohn Forte char fullline[512]; /* Full line read in from IMA.conf */ 392fcf3ce44SJohn Forte char pluginname[64]; /* Read in from file IMA.conf */ 393fcf3ce44SJohn Forte char pluginpath[256]; /* Read in from file IMA.conf */ 394fcf3ce44SJohn Forte char imaConfFilePath[256]; 395fcf3ce44SJohn Forte char systemPath[256]; 396fcf3ce44SJohn Forte char *charPtr; 397fcf3ce44SJohn Forte IMA_UINT dwStrLength; 398fcf3ce44SJohn Forte 399fcf3ce44SJohn Forte IMA_UINT i = 0; 400fcf3ce44SJohn Forte 401fcf3ce44SJohn Forte if (number_of_plugins != -1) 402fcf3ce44SJohn Forte return; 403fcf3ce44SJohn Forte 404fcf3ce44SJohn Forte number_of_plugins = 0; 405fcf3ce44SJohn Forte 406fcf3ce44SJohn Forte if (os_createmutex(&libMutex) == 0) { 407fcf3ce44SJohn Forte return; 408fcf3ce44SJohn Forte } 409fcf3ce44SJohn Forte os_obtainmutex(libMutex); 410fcf3ce44SJohn Forte 411fcf3ce44SJohn Forte sharedNodeAlias[0] = 0; 412fcf3ce44SJohn Forte dwStrLength = 255; 413fcf3ce44SJohn Forte 414fcf3ce44SJohn Forte 415fcf3ce44SJohn Forte 416fcf3ce44SJohn Forte /* Open configuration file from known location */ 417fcf3ce44SJohn Forte #ifdef WIN32 418fcf3ce44SJohn Forte if (GetSystemDirectory(systemPath, sizeof (systemPath))) 419fcf3ce44SJohn Forte sprintf(imaConfFilePath, "%s\\drivers\\etc\\ima.conf", 420fcf3ce44SJohn Forte systemPath); 421fcf3ce44SJohn Forte else 422fcf3ce44SJohn Forte strcpy(imaConfFilePath, "ima.conf"); 423fcf3ce44SJohn Forte #else 424fcf3ce44SJohn Forte strcpy(imaConfFilePath, "/etc/ima.conf"); 425fcf3ce44SJohn Forte #endif 426fcf3ce44SJohn Forte 427fcf3ce44SJohn Forte if ((imaconf = fopen(imaConfFilePath, "r")) == NULL) { 428fcf3ce44SJohn Forte os_releasemutex(libMutex); 429fcf3ce44SJohn Forte return; 430fcf3ce44SJohn Forte } 431fcf3ce44SJohn Forte /* Read in each line and load library */ 432fcf3ce44SJohn Forte while ((imaconf != NULL) && 433fcf3ce44SJohn Forte (fgets(fullline, sizeof (fullline), imaconf))) { 434fcf3ce44SJohn Forte if ((fullline[0] != '#') && (fullline[0] != '\n')) { 435fcf3ce44SJohn Forte /* Take out the '\n' */ 436fcf3ce44SJohn Forte if ((charPtr = (char *)strchr(fullline, '\n')) != NULL) 437fcf3ce44SJohn Forte *charPtr = '\0'; 438fcf3ce44SJohn Forte 439fcf3ce44SJohn Forte /* look for the first tab */ 440fcf3ce44SJohn Forte if ((charPtr = (char *)strchr(fullline, '\t')) == NULL) 441fcf3ce44SJohn Forte charPtr = (char *)strchr(fullline, ' '); 442fcf3ce44SJohn Forte 443fcf3ce44SJohn Forte /* Set Null termination for library name if found */ 444fcf3ce44SJohn Forte if (charPtr != NULL) { 445fcf3ce44SJohn Forte *charPtr++ = '\0'; 446fcf3ce44SJohn Forte /* 447fcf3ce44SJohn Forte * Skip spaces and tabs until 448fcf3ce44SJohn Forte * the next character found 449fcf3ce44SJohn Forte */ 450fcf3ce44SJohn Forte while ((*charPtr == ' ') || (*charPtr == '\t')) 451fcf3ce44SJohn Forte charPtr++; 452fcf3ce44SJohn Forte } 453fcf3ce44SJohn Forte else 454fcf3ce44SJohn Forte continue; /* May be invalid entry */ 455fcf3ce44SJohn Forte 456fcf3ce44SJohn Forte /* Copy library name and path */ 457fcf3ce44SJohn Forte strcpy(pluginname, fullline); 458fcf3ce44SJohn Forte strcpy(pluginpath, charPtr); 459fcf3ce44SJohn Forte 460fcf3ce44SJohn Forte /* 461fcf3ce44SJohn Forte * Continue to the next line if library name or 462fcf3ce44SJohn Forte * path is invalid 463fcf3ce44SJohn Forte */ 464fcf3ce44SJohn Forte if ((strlen(pluginname) == 0) || 465fcf3ce44SJohn Forte (strlen(pluginpath) == 0)) 466fcf3ce44SJohn Forte continue; 467fcf3ce44SJohn Forte 468fcf3ce44SJohn Forte #ifdef WIN32 469fcf3ce44SJohn Forte /* Load the DLL now */ 470fcf3ce44SJohn Forte plugintable[i].hPlugin = LoadLibrary(pluginpath); 471fcf3ce44SJohn Forte #else 472fcf3ce44SJohn Forte /* Load the DLL now */ 473fcf3ce44SJohn Forte plugintable[i].hPlugin = dlopen(pluginpath, RTLD_LAZY); 474fcf3ce44SJohn Forte #endif 475fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 476fcf3ce44SJohn Forte typedef int (*InitializeFn)(); 477fcf3ce44SJohn Forte InitializeFn PassFunc; 478fcf3ce44SJohn Forte IMA_STATUS status; 479fcf3ce44SJohn Forte 480fcf3ce44SJohn Forte memcpy((char *)&plugintable[i].PluginName, 481fcf3ce44SJohn Forte (char *)&pluginname, 64); 482fcf3ce44SJohn Forte memcpy((char *) 483fcf3ce44SJohn Forte &plugintable[i].PluginPath, 484fcf3ce44SJohn Forte (char *)&pluginpath, 256); 485fcf3ce44SJohn Forte plugintable[i].ownerId = i + 1; 486fcf3ce44SJohn Forte 487fcf3ce44SJohn Forte #ifdef WIN32 488fcf3ce44SJohn Forte PassFunc = (InitializeFn) 489fcf3ce44SJohn Forte GetProcAddress( 490fcf3ce44SJohn Forte plugintable[i].hPlugin, "Initialize"); 491fcf3ce44SJohn Forte #else 492fcf3ce44SJohn Forte PassFunc = (InitializeFn) 493fcf3ce44SJohn Forte dlsym( 494fcf3ce44SJohn Forte plugintable[i].hPlugin, "Initialize"); 495fcf3ce44SJohn Forte #endif 496fcf3ce44SJohn Forte if (PassFunc != NULL) { 497fcf3ce44SJohn Forte status = 498fcf3ce44SJohn Forte PassFunc(plugintable[i].ownerId); 499fcf3ce44SJohn Forte } 500fcf3ce44SJohn Forte 501fcf3ce44SJohn Forte plugintable[i].number_of_vbcallbacks = 0; 502fcf3ce44SJohn Forte plugintable[i].number_of_pccallbacks = 0; 503fcf3ce44SJohn Forte os_createmutex(&(plugintable[i].pluginMutex)); 504fcf3ce44SJohn Forte i++; 505fcf3ce44SJohn Forte } 506fcf3ce44SJohn Forte } 507fcf3ce44SJohn Forte } 508fcf3ce44SJohn Forte number_of_plugins = i; 509fcf3ce44SJohn Forte os_releasemutex(libMutex); 510fcf3ce44SJohn Forte } 511fcf3ce44SJohn Forte 512fcf3ce44SJohn Forte 513fcf3ce44SJohn Forte void ExitLibrary() { 514fcf3ce44SJohn Forte IMA_UINT j; 515fcf3ce44SJohn Forte IMA_UINT i; 516fcf3ce44SJohn Forte 517fcf3ce44SJohn Forte if (number_of_plugins == -1) 518fcf3ce44SJohn Forte return; 519fcf3ce44SJohn Forte 520fcf3ce44SJohn Forte os_obtainmutex(libMutex); 521fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 522fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 523fcf3ce44SJohn Forte TerminateFn ExitPassFunc; 524fcf3ce44SJohn Forte 525fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 526fcf3ce44SJohn Forte for (j = 0; j < plugintable[i].number_of_vbcallbacks; 527fcf3ce44SJohn Forte j++) { 528fcf3ce44SJohn Forte #define IMA_DFOBC_STR "IMA_DeregisterForObjectVisibilityChangesFn" 529fcf3ce44SJohn Forte IMA_DeregisterForObjectVisibilityChangesFn 530fcf3ce44SJohn Forte PassFunc; 531fcf3ce44SJohn Forte #ifdef WIN32 532fcf3ce44SJohn Forte PassFunc = 533fcf3ce44SJohn Forte (IMA_DeregisterForObjectVisibilityChangesFn) 534fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 535fcf3ce44SJohn Forte IMA_DFOBC_STR); 536fcf3ce44SJohn Forte #else 537fcf3ce44SJohn Forte PassFunc = 538fcf3ce44SJohn Forte (IMA_DeregisterForObjectVisibilityChangesFn) 539fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 540fcf3ce44SJohn Forte IMA_DFOBC_STR); 541fcf3ce44SJohn Forte #endif 542fcf3ce44SJohn Forte if (PassFunc != NULL) { 543fcf3ce44SJohn Forte PassFunc(plugintable[i].vbcallback[j]); 544fcf3ce44SJohn Forte } 545fcf3ce44SJohn Forte #undef IMA_DFOBC_STR 546fcf3ce44SJohn Forte } 547fcf3ce44SJohn Forte plugintable[i].number_of_vbcallbacks = 0; 548fcf3ce44SJohn Forte 549fcf3ce44SJohn Forte for (j = 0; j < plugintable[i].number_of_pccallbacks; 550fcf3ce44SJohn Forte j++) { 551fcf3ce44SJohn Forte IMA_DeregisterForObjectPropertyChangesFn 552fcf3ce44SJohn Forte PassFunc; 553fcf3ce44SJohn Forte #ifdef WIN32 554fcf3ce44SJohn Forte PassFunc = 555fcf3ce44SJohn Forte (IMA_DeregisterForObjectPropertyChangesFn) 556fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 557fcf3ce44SJohn Forte "IMA_DeregisterForObjectPropertyChangesFn"); 558fcf3ce44SJohn Forte #else 559fcf3ce44SJohn Forte PassFunc = 560fcf3ce44SJohn Forte (IMA_DeregisterForObjectPropertyChangesFn) 561fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 562fcf3ce44SJohn Forte "IMA_DeregisterForObjectPropertyChangesFn"); 563fcf3ce44SJohn Forte #endif 564fcf3ce44SJohn Forte if (PassFunc != NULL) { 565fcf3ce44SJohn Forte PassFunc(plugintable[i].pccallback[j]); 566fcf3ce44SJohn Forte } 567fcf3ce44SJohn Forte } 568fcf3ce44SJohn Forte plugintable[i].number_of_pccallbacks = 0; 569fcf3ce44SJohn Forte 570fcf3ce44SJohn Forte #ifdef WIN32 571fcf3ce44SJohn Forte ExitPassFunc = 572fcf3ce44SJohn Forte (TerminateFn) GetProcAddress 573fcf3ce44SJohn Forte (plugintable[i].hPlugin, "Terminate"); 574fcf3ce44SJohn Forte #else 575fcf3ce44SJohn Forte ExitPassFunc = (TerminateFn) 576fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, "Terminate"); 577fcf3ce44SJohn Forte #endif 578fcf3ce44SJohn Forte if (ExitPassFunc != NULL) { 579fcf3ce44SJohn Forte ExitPassFunc(); 580fcf3ce44SJohn Forte } 581fcf3ce44SJohn Forte #ifdef WIN32 582fcf3ce44SJohn Forte /* Unload DLL from memory */ 583fcf3ce44SJohn Forte FreeLibrary(plugintable[i].hPlugin); 584fcf3ce44SJohn Forte #else 585fcf3ce44SJohn Forte /* Unload DLL from memory */ 586fcf3ce44SJohn Forte dlclose(plugintable[i].hPlugin); 587fcf3ce44SJohn Forte #endif 588fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 589fcf3ce44SJohn Forte os_destroymutex(plugintable[i].pluginMutex); 590fcf3ce44SJohn Forte } 591fcf3ce44SJohn Forte } 592fcf3ce44SJohn Forte number_of_plugins = -1; 593fcf3ce44SJohn Forte os_releasemutex(libMutex); 594fcf3ce44SJohn Forte os_destroymutex(libMutex); 595fcf3ce44SJohn Forte } 596fcf3ce44SJohn Forte 597fcf3ce44SJohn Forte 598fcf3ce44SJohn Forte static void VisibilityCallback( 599fcf3ce44SJohn Forte IMA_BOOL becomingVisible, 600fcf3ce44SJohn Forte IMA_OID objectId) { 601fcf3ce44SJohn Forte IMA_UINT i, j; 602fcf3ce44SJohn Forte os_obtainmutex(libMutex); 603fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 604fcf3ce44SJohn Forte if ((plugintable[i].hPlugin != NULL) && 605fcf3ce44SJohn Forte (objectId.ownerId == plugintable[i].ownerId)) { 606fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 607fcf3ce44SJohn Forte for (j = 0; 608fcf3ce44SJohn Forte j < plugintable[i].number_of_vbcallbacks; 609fcf3ce44SJohn Forte j++) { 610fcf3ce44SJohn Forte (plugintable[i].vbcallback[j]) 611fcf3ce44SJohn Forte (becomingVisible, objectId); 612fcf3ce44SJohn Forte } 613fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 614fcf3ce44SJohn Forte } 615fcf3ce44SJohn Forte } 616fcf3ce44SJohn Forte os_releasemutex(libMutex); 617fcf3ce44SJohn Forte 618fcf3ce44SJohn Forte } 619fcf3ce44SJohn Forte 620fcf3ce44SJohn Forte static void PropertyCallback( 621fcf3ce44SJohn Forte IMA_OID objectId) { 622fcf3ce44SJohn Forte IMA_UINT i, j; 623fcf3ce44SJohn Forte 624fcf3ce44SJohn Forte os_obtainmutex(libMutex); 625fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 626fcf3ce44SJohn Forte if ((plugintable[i].hPlugin != NULL) && 627fcf3ce44SJohn Forte (objectId.ownerId == plugintable[i].ownerId)) { 628fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 629fcf3ce44SJohn Forte for (j = 0; 630fcf3ce44SJohn Forte j < plugintable[i].number_of_pccallbacks; 631fcf3ce44SJohn Forte j++) { 632fcf3ce44SJohn Forte (plugintable[i].pccallback[j])(objectId); 633fcf3ce44SJohn Forte } 634fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 635fcf3ce44SJohn Forte } 636fcf3ce44SJohn Forte } 637fcf3ce44SJohn Forte os_releasemutex(libMutex); 638fcf3ce44SJohn Forte } 639fcf3ce44SJohn Forte 640fcf3ce44SJohn Forte /* 641fcf3ce44SJohn Forte * Gets the date and time, in the form of an IMA_DATETIME, from the build 642fcf3ce44SJohn Forte * script when compiled. 643fcf3ce44SJohn Forte */ 644fcf3ce44SJohn Forte static void GetBuildTime(IMA_DATETIME* pdatetime) { 645fcf3ce44SJohn Forte 646fcf3ce44SJohn Forte #ifdef WIN32 647fcf3ce44SJohn Forte char *dayToken[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; 648fcf3ce44SJohn Forte char *monthToken[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", 649fcf3ce44SJohn Forte "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; 650fcf3ce44SJohn Forte char monthString[4]; 651fcf3ce44SJohn Forte char dayString[4]; 652fcf3ce44SJohn Forte int i; 653fcf3ce44SJohn Forte 654fcf3ce44SJohn Forte sscanf(__TIME__, "%u:%u:%u", &pdatetime->tm_hour, 655fcf3ce44SJohn Forte &pdatetime->tm_min, &pdatetime->tm_sec); 656fcf3ce44SJohn Forte sscanf(__DATE__, "%s %u %u", monthString, 657fcf3ce44SJohn Forte &pdatetime->tm_mday, &pdatetime->tm_year); 658fcf3ce44SJohn Forte sscanf(__TIMESTAMP__, "%s", dayString); 659fcf3ce44SJohn Forte 660fcf3ce44SJohn Forte pdatetime->tm_year -= 1900; 661fcf3ce44SJohn Forte pdatetime->tm_isdst = -1; 662fcf3ce44SJohn Forte 663fcf3ce44SJohn Forte pdatetime->tm_wday = 0; 664fcf3ce44SJohn Forte for (i = 0; i < 7; i++) { 665fcf3ce44SJohn Forte if (strcmp(dayToken[i], dayString) == 0) { 666fcf3ce44SJohn Forte pdatetime->tm_wday = i; 667fcf3ce44SJohn Forte break; 668fcf3ce44SJohn Forte } 669fcf3ce44SJohn Forte } 670fcf3ce44SJohn Forte 671fcf3ce44SJohn Forte pdatetime->tm_mon = 0; 672fcf3ce44SJohn Forte for (i = 0; i < 12; i++) { 673fcf3ce44SJohn Forte if (strcmp(monthToken[i], monthString) == 0) { 674fcf3ce44SJohn Forte pdatetime->tm_mon = i; 675fcf3ce44SJohn Forte break; 676fcf3ce44SJohn Forte } 677fcf3ce44SJohn Forte } 678fcf3ce44SJohn Forte 679fcf3ce44SJohn Forte #else 680fcf3ce44SJohn Forte #if defined(BUILD_DATE) 681fcf3ce44SJohn Forte if (strptime(BUILD_DATE, "%Y/%m/%d %T %Z", pdatetime) == NULL) { 682fcf3ce44SJohn Forte memset(pdatetime, 0, sizeof (IMA_DATETIME)); 683fcf3ce44SJohn Forte } 684fcf3ce44SJohn Forte #else 685fcf3ce44SJohn Forte memset(pdatetime, 0, sizeof (IMA_DATETIME)); 686fcf3ce44SJohn Forte #endif 687fcf3ce44SJohn Forte #endif 688fcf3ce44SJohn Forte 689fcf3ce44SJohn Forte } 690fcf3ce44SJohn Forte 691fcf3ce44SJohn Forte 692fcf3ce44SJohn Forte 693fcf3ce44SJohn Forte /* 694fcf3ce44SJohn Forte * Gets the properties of the IMA library that is being used. 695fcf3ce44SJohn Forte * 696fcf3ce44SJohn Forte * @param pProps A pointer to an @ref IMA_LIBRARY_PROPERTIES structure 697fcf3ce44SJohn Forte * allocated by the caller. On successful return this structure will 698fcf3ce44SJohn Forte * contain the properties of the IMA library. 699fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful or if 700fcf3ce44SJohn Forte * an error occurred. 701fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the library properties were successfully 702fcf3ce44SJohn Forte * returned. 703fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a pProps is NULL or 704fcf3ce44SJohn Forte * specifies a memory area to which data cannot be written. 705fcf3ce44SJohn Forte */ 706fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetLibraryProperties( 707fcf3ce44SJohn Forte IMA_LIBRARY_PROPERTIES *pProps) { 708fcf3ce44SJohn Forte 709fcf3ce44SJohn Forte char imaPath[256]; 710fcf3ce44SJohn Forte #ifdef WIN32 711fcf3ce44SJohn Forte HMODULE imaHandle; 712fcf3ce44SJohn Forte #endif 713fcf3ce44SJohn Forte 714fcf3ce44SJohn Forte if (number_of_plugins == -1) 715fcf3ce44SJohn Forte InitLibrary(); 716fcf3ce44SJohn Forte 717fcf3ce44SJohn Forte if (pProps == NULL) 718fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 719fcf3ce44SJohn Forte 720fcf3ce44SJohn Forte // Fill in the library properties. 721fcf3ce44SJohn Forte GetBuildTime(&pProps->buildTime); 722fcf3ce44SJohn Forte pProps->supportedImaVersion = LIBRARY_PROPERTY_SUPPORTED_IMA_VERSION; 723fcf3ce44SJohn Forte libSwprintf(pProps->implementationVersion, L"%ls", 724fcf3ce44SJohn Forte LIBRARY_PROPERTY_IMPLEMENTATION_VERSION); 725fcf3ce44SJohn Forte libSwprintf(pProps->vendor, L"%ls", LIBRARY_PROPERTY_VENDOR); 726fcf3ce44SJohn Forte 727fcf3ce44SJohn Forte 728fcf3ce44SJohn Forte #ifdef WIN32 729fcf3ce44SJohn Forte imaHandle = GetModuleHandleA("ima"); 730fcf3ce44SJohn Forte imaPath[0] = 0; 731fcf3ce44SJohn Forte if (imaHandle != NULL) { 732fcf3ce44SJohn Forte GetModuleFileNameA(imaHandle, imaPath, 256); 733fcf3ce44SJohn Forte } 734fcf3ce44SJohn Forte MultiByteToWideChar(CP_ACP, 0, imaPath, -1, 735fcf3ce44SJohn Forte pProps->fileName, 256); 736fcf3ce44SJohn Forte #else 737fcf3ce44SJohn Forte libSwprintf(pProps->fileName, LIBRARY_FILE_NAME); 738fcf3ce44SJohn Forte 739fcf3ce44SJohn Forte // mbstowcs(pProps->fileName, imaPath, 256); 740fcf3ce44SJohn Forte #endif 741fcf3ce44SJohn Forte 742fcf3ce44SJohn Forte return (IMA_STATUS_SUCCESS); 743fcf3ce44SJohn Forte } 744fcf3ce44SJohn Forte 745fcf3ce44SJohn Forte 746fcf3ce44SJohn Forte /* 747fcf3ce44SJohn Forte * Gets a list of the object IDs of all currently loaded plugins. 748fcf3ce44SJohn Forte * 749fcf3ce44SJohn Forte * @param ppList A pointer to a pointer to an @ref IMA_OID_LIST. 750fcf3ce44SJohn Forte * On successful return this will contain a pointer to an @ref 751fcf3ce44SJohn Forte * IMA_OID_LIST which contains the object IDs of all of the plugins 752fcf3ce44SJohn Forte * currently loaded by the library. 753fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful 754fcf3ce44SJohn Forte * or if an error occurred. 755fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the plugin ID list was successfully 756fcf3ce44SJohn Forte * returned. 757fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a ppList is NULL or 758fcf3ce44SJohn Forte * specifies a memory area to which data cannot be written. 759fcf3ce44SJohn Forte */ 760fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetPluginOidList( 761fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 762fcf3ce44SJohn Forte IMA_UINT i; 763fcf3ce44SJohn Forte 764fcf3ce44SJohn Forte 765fcf3ce44SJohn Forte if (number_of_plugins == -1) 766fcf3ce44SJohn Forte InitLibrary(); 767fcf3ce44SJohn Forte 768fcf3ce44SJohn Forte if (ppList == NULL) 769fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 770fcf3ce44SJohn Forte 771fcf3ce44SJohn Forte os_obtainmutex(libMutex); 772fcf3ce44SJohn Forte 773fcf3ce44SJohn Forte *ppList = (IMA_OID_LIST*)calloc(1, sizeof (IMA_OID_LIST) + 774fcf3ce44SJohn Forte (number_of_plugins - 1) * sizeof (IMA_OID)); 775fcf3ce44SJohn Forte 776fcf3ce44SJohn Forte if ((*ppList) == NULL) 777fcf3ce44SJohn Forte return (IMA_ERROR_UNEXPECTED_OS_ERROR); 778fcf3ce44SJohn Forte 779fcf3ce44SJohn Forte (*ppList)->oidCount = number_of_plugins; 780fcf3ce44SJohn Forte 781fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 782fcf3ce44SJohn Forte 783fcf3ce44SJohn Forte (*ppList)->oids[i].objectType = IMA_OBJECT_TYPE_PLUGIN; 784fcf3ce44SJohn Forte (*ppList)->oids[i].ownerId = plugintable[i].ownerId; 785fcf3ce44SJohn Forte (*ppList)->oids[i].objectSequenceNumber = 0; 786fcf3ce44SJohn Forte 787fcf3ce44SJohn Forte } 788fcf3ce44SJohn Forte os_releasemutex(libMutex); 789fcf3ce44SJohn Forte return (IMA_STATUS_SUCCESS); 790fcf3ce44SJohn Forte } 791fcf3ce44SJohn Forte 792fcf3ce44SJohn Forte 793fcf3ce44SJohn Forte 794fcf3ce44SJohn Forte 795fcf3ce44SJohn Forte /* 796fcf3ce44SJohn Forte * Gets the properties of the specified vendor plugin. 797fcf3ce44SJohn Forte * 798fcf3ce44SJohn Forte * @param pluginId The ID of the plugin whose properties are being retrieved. 799fcf3ce44SJohn Forte * @param pProps A pointer to an @ref IMA_PLUGIN_PROPERTIES structure 800fcf3ce44SJohn Forte * allocated by the caller. On successful return this will contain the 801fcf3ce44SJohn Forte * properties of the plugin specified by pluginId. 802fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful or if 803fcf3ce44SJohn Forte * an error occurred. 804fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the plugin properties were successfully 805fcf3ce44SJohn Forte * returned. 806fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_OBJECT_TYPE Returned if @a pluginId does not 807fcf3ce44SJohn Forte * specify any valid object type. 808fcf3ce44SJohn Forte * @retval IMA_ERROR_INCORRECT_OBJECT_TYPE Returned if @a pluginId does not 809fcf3ce44SJohn Forte * specify a plugin object. 810fcf3ce44SJohn Forte * @retval IMA_ERROR_OBJECT_NOT_FOUND Returned if @a pluginId refers to a 811fcf3ce44SJohn Forte * plugin, but not one that is currently loaded. 812fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a pProps is NULL or 813fcf3ce44SJohn Forte * specify a memory area to which data cannot be written. 814fcf3ce44SJohn Forte */ 815fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetPluginProperties( 816fcf3ce44SJohn Forte IMA_OID pluginOid, 817fcf3ce44SJohn Forte IMA_PLUGIN_PROPERTIES *pProps) { 818fcf3ce44SJohn Forte IMA_GetPluginPropertiesFn PassFunc; 819fcf3ce44SJohn Forte IMA_UINT i; 820fcf3ce44SJohn Forte IMA_STATUS status; 821fcf3ce44SJohn Forte 822fcf3ce44SJohn Forte if (number_of_plugins == -1) 823fcf3ce44SJohn Forte InitLibrary(); 824fcf3ce44SJohn Forte 825fcf3ce44SJohn Forte if (pProps == NULL) 826fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 827fcf3ce44SJohn Forte 828fcf3ce44SJohn Forte if ((pluginOid.objectType != IMA_OBJECT_TYPE_PLUGIN) || 829fcf3ce44SJohn Forte (pluginOid.objectSequenceNumber != 0)) 830fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 831fcf3ce44SJohn Forte 832fcf3ce44SJohn Forte os_obtainmutex(libMutex); 833fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 834fcf3ce44SJohn Forte 835fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 836fcf3ce44SJohn Forte if (plugintable[i].ownerId == pluginOid.ownerId) { 837fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 838fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 839fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 840fcf3ce44SJohn Forte #ifdef WIN32 841fcf3ce44SJohn Forte PassFunc = (IMA_GetPluginPropertiesFn) 842fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 843fcf3ce44SJohn Forte "IMA_GetPluginProperties"); 844fcf3ce44SJohn Forte #else 845fcf3ce44SJohn Forte PassFunc = (IMA_GetPluginPropertiesFn) 846fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 847fcf3ce44SJohn Forte "IMA_GetPluginProperties"); 848fcf3ce44SJohn Forte #endif 849fcf3ce44SJohn Forte if (PassFunc != NULL) { 850fcf3ce44SJohn Forte status = PassFunc(pluginOid, pProps); 851fcf3ce44SJohn Forte } 852fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 853fcf3ce44SJohn Forte } 854fcf3ce44SJohn Forte 855fcf3ce44SJohn Forte break; 856fcf3ce44SJohn Forte } 857fcf3ce44SJohn Forte } 858fcf3ce44SJohn Forte os_releasemutex(libMutex); 859fcf3ce44SJohn Forte return (status); 860fcf3ce44SJohn Forte 861fcf3ce44SJohn Forte } 862fcf3ce44SJohn Forte 863fcf3ce44SJohn Forte 864fcf3ce44SJohn Forte 865fcf3ce44SJohn Forte 866fcf3ce44SJohn Forte /* 867fcf3ce44SJohn Forte * Gets the object ID for the plugin associated with the specified object ID. 868fcf3ce44SJohn Forte * 869fcf3ce44SJohn Forte * @param objectId The object ID of an object that has been received from 870fcf3ce44SJohn Forte * a previous library call. 871fcf3ce44SJohn Forte * @param pPluginId A pointer to an @ref IMA_OID structure allocated by the 872fcf3ce44SJohn Forte * caller. On successful return this will contain the object ID of the 873fcf3ce44SJohn Forte * plugin associated with the object specified by @a objectId. This 874fcf3ce44SJohn Forte * can then be used to work with the plugin, e.g., to get the 875fcf3ce44SJohn Forte * properties of the plugin or the send the plugin an IOCtl. 876fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful or if 877fcf3ce44SJohn Forte * an error occurred. 878fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the associated plugin ID was 879fcf3ce44SJohn Forte * successfully returned. 880fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a pPluginId is NULL 881fcf3ce44SJohn Forte * or specifes a memory area to which data cannot be written. 882fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a objectId specifies 883fcf3ce44SJohn Forte * an object not owned by a plugin, but instead one that is owned by 884fcf3ce44SJohn Forte * the library. 885fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_OBJECT_TYPE Returned if @a objectId specifies 886fcf3ce44SJohn Forte * an object with an invalid type. 887fcf3ce44SJohn Forte */ 888fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetAssociatedPluginOid( 889fcf3ce44SJohn Forte IMA_OID objectId, 890fcf3ce44SJohn Forte IMA_OID *pPluginId) { 891fcf3ce44SJohn Forte IMA_UINT i; 892fcf3ce44SJohn Forte IMA_STATUS status; 893fcf3ce44SJohn Forte 894fcf3ce44SJohn Forte 895fcf3ce44SJohn Forte if (number_of_plugins == -1) 896fcf3ce44SJohn Forte InitLibrary(); 897fcf3ce44SJohn Forte 898fcf3ce44SJohn Forte if (pPluginId == NULL || objectId.ownerId == RL_LIBRARY_SEQNUM) 899fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 900fcf3ce44SJohn Forte 901fcf3ce44SJohn Forte if (objectId.objectType != IMA_OBJECT_TYPE_UNKNOWN && 902fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_PLUGIN && 903fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_NODE && 904fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_LHBA && 905fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_PHBA && 906fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_NETWORK_PORTAL && 907fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_PORTAL_GROUP && 908fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_LNP && 909fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_PNP && 910fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_TARGET && 911fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_LU && 912fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_DISCOVERY_ADDRESS && 913fcf3ce44SJohn Forte objectId.objectType != IMA_OBJECT_TYPE_STATIC_DISCOVERY_TARGET) 914fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_OBJECT_TYPE); 915fcf3ce44SJohn Forte 916fcf3ce44SJohn Forte os_obtainmutex(libMutex); 917fcf3ce44SJohn Forte 918fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 919fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 920fcf3ce44SJohn Forte if (objectId.ownerId == plugintable[i].ownerId) { 921fcf3ce44SJohn Forte pPluginId->objectType = IMA_OBJECT_TYPE_PLUGIN; 922fcf3ce44SJohn Forte pPluginId->ownerId = plugintable[i].ownerId; 923fcf3ce44SJohn Forte pPluginId->objectSequenceNumber = 0; 924fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 925fcf3ce44SJohn Forte } 926fcf3ce44SJohn Forte 927fcf3ce44SJohn Forte } 928fcf3ce44SJohn Forte os_releasemutex(libMutex); 929fcf3ce44SJohn Forte return (status); 930fcf3ce44SJohn Forte } 931fcf3ce44SJohn Forte 932fcf3ce44SJohn Forte 933fcf3ce44SJohn Forte 934fcf3ce44SJohn Forte 935fcf3ce44SJohn Forte /* 936fcf3ce44SJohn Forte * Gets the object ID of the shared node. 937fcf3ce44SJohn Forte * 938fcf3ce44SJohn Forte * @param pSharedNodeId A pointer to an @ref IMA_OID structure allocated by 939fcf3ce44SJohn Forte * the caller. On successful return it will contain the object ID of the 940fcf3ce44SJohn Forte * shared node of the currently executing system is placed. 941fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful or if 942fcf3ce44SJohn Forte * an error occurred. 943fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the shared node ID has been successfully 944fcf3ce44SJohn Forte * retrieved. 945fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a pSharedNodeId is NULL 946fcf3ce44SJohn Forte * or specifies a memory area to which data cannot be written. 947fcf3ce44SJohn Forte */ 948fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetSharedNodeOid( 949fcf3ce44SJohn Forte IMA_OID *pSharedNodeId) { 950fcf3ce44SJohn Forte if (pSharedNodeId == NULL) 951fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 952fcf3ce44SJohn Forte 953fcf3ce44SJohn Forte pSharedNodeId->objectType = IMA_OBJECT_TYPE_NODE; 954fcf3ce44SJohn Forte pSharedNodeId->ownerId = RL_LIBRARY_SEQNUM; 955fcf3ce44SJohn Forte pSharedNodeId->objectSequenceNumber = RL_SHARED_NODE_SEQNUM; 956fcf3ce44SJohn Forte return (IMA_STATUS_SUCCESS); 957fcf3ce44SJohn Forte } 958fcf3ce44SJohn Forte 959fcf3ce44SJohn Forte 960fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetObjectType( 961fcf3ce44SJohn Forte IMA_OID oid, 962fcf3ce44SJohn Forte IMA_OBJECT_TYPE *pObjectType) { 963fcf3ce44SJohn Forte IMA_STATUS status; 964fcf3ce44SJohn Forte IMA_UINT i; 965fcf3ce44SJohn Forte 966fcf3ce44SJohn Forte if (pObjectType == NULL) 967fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 968fcf3ce44SJohn Forte 969fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_UNKNOWN && 970fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_PLUGIN && 971fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_NODE && 972fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_LHBA && 973fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_PHBA && 974fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_NETWORK_PORTAL && 975fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_PORTAL_GROUP && 976fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_LNP && 977fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_PNP && 978fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_TARGET && 979fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_LU && 980fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_DISCOVERY_ADDRESS && 981fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_STATIC_DISCOVERY_TARGET) 982fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_OBJECT_TYPE); 983fcf3ce44SJohn Forte 984fcf3ce44SJohn Forte os_obtainmutex(libMutex); 985fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 986fcf3ce44SJohn Forte 987fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 988fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 989fcf3ce44SJohn Forte *pObjectType = oid.objectType; 990fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 991fcf3ce44SJohn Forte } 992fcf3ce44SJohn Forte } 993fcf3ce44SJohn Forte os_releasemutex(libMutex); 994fcf3ce44SJohn Forte return (status); 995fcf3ce44SJohn Forte } 996fcf3ce44SJohn Forte 997fcf3ce44SJohn Forte 998fcf3ce44SJohn Forte 999fcf3ce44SJohn Forte /* 1000fcf3ce44SJohn Forte * Gets the properties of the specified iSCSI node. 1001fcf3ce44SJohn Forte * @param nodeId The ID of the node to get the properties of. 1002fcf3ce44SJohn Forte * @param pProps A pointer to an @ref IMA_NODE_PROPERTIES structure 1003fcf3ce44SJohn Forte * which on successfully return 1004fcf3ce44SJohn Forte * will contain the properties of the specified node. 1005fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful or 1006fcf3ce44SJohn Forte * if an error occurred. 1007fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the node properties have been 1008fcf3ce44SJohn Forte * successfully retrieved. 1009fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a pProps is NULL 1010fcf3ce44SJohn Forte * or specifies a memory area to which data cannot be written. 1011fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_OBJECT_TYPE Returned if @a nodeId does 1012fcf3ce44SJohn Forte * not specify any valid object type. 1013fcf3ce44SJohn Forte * @retval IMA_ERROR_INCORRECT_OBJECT_TYPE Returned if @a nodeId does 1014fcf3ce44SJohn Forte * not specify a node object. 1015fcf3ce44SJohn Forte * @retval IMA_ERROR_OBJECT_NOT_FOUND Returned if @a nodeId does not 1016fcf3ce44SJohn Forte * specify a node which is currently known to the system. 1017fcf3ce44SJohn Forte */ 1018fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetNodeProperties( 1019fcf3ce44SJohn Forte IMA_OID nodeOid, 1020fcf3ce44SJohn Forte IMA_NODE_PROPERTIES *pProps) { 1021fcf3ce44SJohn Forte IMA_GetNodePropertiesFn PassFunc; 1022fcf3ce44SJohn Forte IMA_UINT i; 1023fcf3ce44SJohn Forte IMA_STATUS status; 1024fcf3ce44SJohn Forte char fullline[512]; /* Full line read in from IMA.conf */ 1025*5d539a8eSMatt Barden char nodename[MAXHOSTNAMELEN]; 1026*5d539a8eSMatt Barden 1027*5d539a8eSMatt Barden #if defined(_WINDOWS) 1028fcf3ce44SJohn Forte IMA_UINT dwStrLength; 1029*5d539a8eSMatt Barden #endif 1030fcf3ce44SJohn Forte 1031fcf3ce44SJohn Forte if (number_of_plugins == -1) 1032fcf3ce44SJohn Forte InitLibrary(); 1033fcf3ce44SJohn Forte 1034fcf3ce44SJohn Forte if (pProps == NULL) 1035fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 1036fcf3ce44SJohn Forte 1037fcf3ce44SJohn Forte if (nodeOid.objectType != IMA_OBJECT_TYPE_NODE) 1038fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 1039fcf3ce44SJohn Forte 1040fcf3ce44SJohn Forte if ((nodeOid.ownerId == RL_LIBRARY_SEQNUM) && 1041fcf3ce44SJohn Forte (nodeOid.objectSequenceNumber == RL_SHARED_NODE_SEQNUM)) { 1042fcf3ce44SJohn Forte pProps->runningInInitiatorMode = IMA_TRUE; 1043fcf3ce44SJohn Forte pProps->runningInTargetMode = IMA_TRUE; 1044fcf3ce44SJohn Forte pProps->nameAndAliasSettable = IMA_TRUE; 1045fcf3ce44SJohn Forte 1046fcf3ce44SJohn Forte if (sharedNodeName[0] == 0) { 1047fcf3ce44SJohn Forte #if defined(_WINDOWS) 1048fcf3ce44SJohn Forte GetComputerName((char *)fullline, 1049fcf3ce44SJohn Forte (LPDWORD)&dwStrLength); 1050fcf3ce44SJohn Forte sprintf(nodename, DEFAULT_NODE_NAME_FORMAT, fullline); 1051fcf3ce44SJohn Forte MultiByteToWideChar(CP_ACP, 0, nodename, -1, 1052fcf3ce44SJohn Forte sharedNodeName, 256); 1053fcf3ce44SJohn Forte #elif defined(SOLARIS) 1054fcf3ce44SJohn Forte 1055fcf3ce44SJohn Forte if (getSolarisSharedNodeName(sharedNodeName) != 1056fcf3ce44SJohn Forte IMA_STATUS_SUCCESS) { 1057*5d539a8eSMatt Barden gethostname((char *)fullline, 1058*5d539a8eSMatt Barden sizeof (fullline)); 1059fcf3ce44SJohn Forte sprintf(nodename, 1060fcf3ce44SJohn Forte DEFAULT_NODE_NAME_FORMAT, fullline); 1061fcf3ce44SJohn Forte mbstowcs(sharedNodeName, nodename, 256); 1062fcf3ce44SJohn Forte } 1063fcf3ce44SJohn Forte #else 1064*5d539a8eSMatt Barden gethostname((char *)fullline, sizeof (fullline)); 1065fcf3ce44SJohn Forte sprintf(nodename, DEFAULT_NODE_NAME_FORMAT, fullline); 1066fcf3ce44SJohn Forte mbstowcs(sharedNodeName, nodename, 256); 1067fcf3ce44SJohn Forte #endif 1068fcf3ce44SJohn Forte } 1069fcf3ce44SJohn Forte 1070fcf3ce44SJohn Forte if (sharedNodeName[0] != 0) { 1071fcf3ce44SJohn Forte libSwprintf(pProps->name, L"%ls", sharedNodeName); 1072fcf3ce44SJohn Forte pProps->nameValid = IMA_TRUE; 1073fcf3ce44SJohn Forte } 1074fcf3ce44SJohn Forte else 1075fcf3ce44SJohn Forte pProps->nameValid = IMA_FALSE; 1076fcf3ce44SJohn Forte 1077fcf3ce44SJohn Forte #if defined(SOLARIS) 1078fcf3ce44SJohn Forte if (sharedNodeAlias[0] == 0) { 1079fcf3ce44SJohn Forte getSolarisSharedNodeAlias(sharedNodeAlias); 1080fcf3ce44SJohn Forte } 1081fcf3ce44SJohn Forte #endif 1082fcf3ce44SJohn Forte 1083fcf3ce44SJohn Forte if (sharedNodeAlias[0] != 0) { 1084fcf3ce44SJohn Forte libSwprintf(pProps->alias, L"%ls", sharedNodeAlias); 1085fcf3ce44SJohn Forte pProps->aliasValid = IMA_TRUE; 1086fcf3ce44SJohn Forte } 1087fcf3ce44SJohn Forte else 1088fcf3ce44SJohn Forte pProps->aliasValid = IMA_FALSE; 1089fcf3ce44SJohn Forte 1090fcf3ce44SJohn Forte return (IMA_STATUS_SUCCESS); 1091fcf3ce44SJohn Forte } 1092fcf3ce44SJohn Forte 1093fcf3ce44SJohn Forte os_obtainmutex(libMutex); 1094fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 1095fcf3ce44SJohn Forte 1096fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 1097fcf3ce44SJohn Forte if (plugintable[i].ownerId == nodeOid.ownerId) { 1098fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 1099fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 1100fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 1101fcf3ce44SJohn Forte #ifdef WIN32 1102fcf3ce44SJohn Forte PassFunc = (IMA_GetNodePropertiesFn) 1103fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 1104fcf3ce44SJohn Forte "IMA_GetNodeProperties"); 1105fcf3ce44SJohn Forte #else 1106fcf3ce44SJohn Forte PassFunc = (IMA_GetNodePropertiesFn) 1107fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1108fcf3ce44SJohn Forte "IMA_GetNodeProperties"); 1109fcf3ce44SJohn Forte #endif 1110fcf3ce44SJohn Forte 1111fcf3ce44SJohn Forte if (PassFunc != NULL) { 1112fcf3ce44SJohn Forte status = PassFunc(nodeOid, pProps); 1113fcf3ce44SJohn Forte } 1114fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 1115fcf3ce44SJohn Forte } 1116fcf3ce44SJohn Forte 1117fcf3ce44SJohn Forte break; 1118fcf3ce44SJohn Forte } 1119fcf3ce44SJohn Forte } 1120fcf3ce44SJohn Forte os_releasemutex(libMutex); 1121fcf3ce44SJohn Forte return (status); 1122fcf3ce44SJohn Forte 1123fcf3ce44SJohn Forte } 1124fcf3ce44SJohn Forte 1125fcf3ce44SJohn Forte 1126fcf3ce44SJohn Forte 1127fcf3ce44SJohn Forte 1128fcf3ce44SJohn Forte /* 1129fcf3ce44SJohn Forte * Sets the name of the specified node. 1130fcf3ce44SJohn Forte * 1131fcf3ce44SJohn Forte * @param nodeId The object ID of the node whose name is being set. 1132fcf3ce44SJohn Forte * @param newName The new name of the node. 1133fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful or if 1134fcf3ce44SJohn Forte * an error occurred. 1135fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the node name was successfully changed. 1136fcf3ce44SJohn Forte * @retval IMA_STATUS_REBOOT_NECESSARY Returned if a reboot is necessary 1137fcf3ce44SJohn Forte * before the setting of the name actually takes affect. 1138fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a newname is NULL, or 1139fcf3ce44SJohn Forte * specifies a memory area to which data cannot be written, or has a 1140fcf3ce44SJohn Forte * length of 0. 1141fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_OBJECT_TYPE Returned if @a nodeId does not 1142fcf3ce44SJohn Forte * specify any valid object type. 1143fcf3ce44SJohn Forte * @retval IMA_ERROR_INCORRECT_OBJECT_TYPE Returned if @a nodeId does not 1144fcf3ce44SJohn Forte * specify a node object. 1145fcf3ce44SJohn Forte * @retval IMA_ERROR_OBJECT_NOT_FOUND Returned if @a nodeId does not specify a 1146fcf3ce44SJohn Forte * node which is currently known to the system. 1147fcf3ce44SJohn Forte * @retval IMA_ERROR_NAME_TOO_LONG Returned if @a newName contains too many 1148fcf3ce44SJohn Forte * characters. 1149fcf3ce44SJohn Forte */ 1150fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetNodeName( 1151fcf3ce44SJohn Forte IMA_OID nodeOid, 1152fcf3ce44SJohn Forte const IMA_NODE_NAME newName) { 1153fcf3ce44SJohn Forte IMA_SetNodeNameFn PassFunc; 1154fcf3ce44SJohn Forte IMA_UINT i; 1155fcf3ce44SJohn Forte IMA_STATUS status; 1156fcf3ce44SJohn Forte 1157fcf3ce44SJohn Forte if (number_of_plugins == -1) 1158fcf3ce44SJohn Forte InitLibrary(); 1159fcf3ce44SJohn Forte 1160fcf3ce44SJohn Forte if (newName == NULL || wcslen(newName) == 0) 1161fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 1162fcf3ce44SJohn Forte 1163fcf3ce44SJohn Forte if (wcslen(newName) > IMA_NODE_NAME_LEN - 1) 1164fcf3ce44SJohn Forte return (IMA_ERROR_NAME_TOO_LONG); 1165fcf3ce44SJohn Forte 1166fcf3ce44SJohn Forte if (nodeOid.objectType != IMA_OBJECT_TYPE_NODE) 1167fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 1168fcf3ce44SJohn Forte 1169fcf3ce44SJohn Forte if ((nodeOid.ownerId == RL_LIBRARY_SEQNUM) && 1170fcf3ce44SJohn Forte (nodeOid.objectSequenceNumber == RL_SHARED_NODE_SEQNUM)) { 1171fcf3ce44SJohn Forte #if defined(SOLARIS) 1172fcf3ce44SJohn Forte if (setSolarisSharedNodeName(newName) != IMA_STATUS_SUCCESS) { 1173fcf3ce44SJohn Forte return (IMA_ERROR_UNKNOWN_ERROR); 1174fcf3ce44SJohn Forte } 1175fcf3ce44SJohn Forte #endif 1176fcf3ce44SJohn Forte os_obtainmutex(libMutex); 1177fcf3ce44SJohn Forte libSwprintf(sharedNodeName, L"%ls", newName); 1178fcf3ce44SJohn Forte os_releasemutex(libMutex); 1179fcf3ce44SJohn Forte return (IMA_STATUS_SUCCESS); 1180fcf3ce44SJohn Forte } 1181fcf3ce44SJohn Forte 1182fcf3ce44SJohn Forte os_obtainmutex(libMutex); 1183fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 1184fcf3ce44SJohn Forte 1185fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 1186fcf3ce44SJohn Forte if (plugintable[i].ownerId == nodeOid.ownerId) { 1187fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 1188fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 1189fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 1190fcf3ce44SJohn Forte #ifdef WIN32 1191fcf3ce44SJohn Forte PassFunc = (IMA_SetNodeNameFn) 1192fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 1193fcf3ce44SJohn Forte "IMA_SetNodeName"); 1194fcf3ce44SJohn Forte #else 1195fcf3ce44SJohn Forte PassFunc = (IMA_SetNodeNameFn) 1196fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1197fcf3ce44SJohn Forte "IMA_SetNodeName"); 1198fcf3ce44SJohn Forte #endif 1199fcf3ce44SJohn Forte 1200fcf3ce44SJohn Forte if (PassFunc != NULL) { 1201fcf3ce44SJohn Forte status = PassFunc(nodeOid, newName); 1202fcf3ce44SJohn Forte } 1203fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 1204fcf3ce44SJohn Forte } 1205fcf3ce44SJohn Forte 1206fcf3ce44SJohn Forte break; 1207fcf3ce44SJohn Forte } 1208fcf3ce44SJohn Forte } 1209fcf3ce44SJohn Forte os_releasemutex(libMutex); 1210fcf3ce44SJohn Forte return (status); 1211fcf3ce44SJohn Forte 1212fcf3ce44SJohn Forte } 1213fcf3ce44SJohn Forte 1214fcf3ce44SJohn Forte 1215fcf3ce44SJohn Forte 1216fcf3ce44SJohn Forte 1217fcf3ce44SJohn Forte /* 1218fcf3ce44SJohn Forte * Generates an unique node name for the currently running system. 1219fcf3ce44SJohn Forte * 1220fcf3ce44SJohn Forte * @param generatedname On successful return contains the generated node 1221fcf3ce44SJohn Forte * name. 1222fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful or if 1223fcf3ce44SJohn Forte * an error occurred. 1224fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a generatedname is NULL 1225fcf3ce44SJohn Forte * or specifies a memory area to which data cannot be written. 1226fcf3ce44SJohn Forte */ 1227fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GenerateNodeName( 1228fcf3ce44SJohn Forte IMA_NODE_NAME generatedname) { 1229fcf3ce44SJohn Forte char computername[256]; 1230*5d539a8eSMatt Barden char nodename[MAXHOSTNAMELEN]; 1231*5d539a8eSMatt Barden 1232*5d539a8eSMatt Barden #if defined(_WINDOWS) 1233*5d539a8eSMatt Barden IMA_UINT dwStrLength = 255; 1234*5d539a8eSMatt Barden #endif 1235*5d539a8eSMatt Barden 1236fcf3ce44SJohn Forte #ifndef _WINDOWS 1237fcf3ce44SJohn Forte #ifndef SOLARIS 1238fcf3ce44SJohn Forte int i; 1239fcf3ce44SJohn Forte #endif 1240fcf3ce44SJohn Forte #endif 1241fcf3ce44SJohn Forte 1242fcf3ce44SJohn Forte if (generatedname == NULL) 1243fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 1244fcf3ce44SJohn Forte 1245fcf3ce44SJohn Forte #if defined(_WINDOWS) 1246fcf3ce44SJohn Forte GetComputerName((char *)computername, (LPDWORD)&dwStrLength); 1247fcf3ce44SJohn Forte _strlwr(computername); 1248fcf3ce44SJohn Forte _snprintf(nodename, 256, DEFAULT_NODE_NAME_FORMAT, computername); 1249fcf3ce44SJohn Forte MultiByteToWideChar(CP_ACP, 0, nodename, -1, 1250fcf3ce44SJohn Forte generatedname, 256); 1251fcf3ce44SJohn Forte #elif defined(SOLARIS) 1252fcf3ce44SJohn Forte if (getSolarisSharedNodeName(generatedname) != IMA_STATUS_SUCCESS) { 1253*5d539a8eSMatt Barden gethostname(computername, sizeof (computername)); 1254fcf3ce44SJohn Forte sprintf(nodename, DEFAULT_NODE_NAME_FORMAT, generatedname); 1255fcf3ce44SJohn Forte mbstowcs(generatedname, nodename, 256); 1256fcf3ce44SJohn Forte } 1257fcf3ce44SJohn Forte #else 1258*5d539a8eSMatt Barden gethostname((char *)computername, sizeof (computername)); 1259fcf3ce44SJohn Forte i = 0; 1260fcf3ce44SJohn Forte while (computername[i] != '\0') { 1261fcf3ce44SJohn Forte computername[i] = tolower(computername[i]); 1262fcf3ce44SJohn Forte i++; 1263fcf3ce44SJohn Forte } 1264fcf3ce44SJohn Forte snprintf(nodename, 256, DEFAULT_NODE_NAME_FORMAT, computername); 1265fcf3ce44SJohn Forte mbstowcs(generatedname, nodename, 256); 1266fcf3ce44SJohn Forte #endif 1267fcf3ce44SJohn Forte 1268fcf3ce44SJohn Forte return (IMA_STATUS_SUCCESS); 1269fcf3ce44SJohn Forte } 1270fcf3ce44SJohn Forte 1271fcf3ce44SJohn Forte 1272fcf3ce44SJohn Forte /* 1273fcf3ce44SJohn Forte * Sets the alias of the specified node. 1274fcf3ce44SJohn Forte * 1275fcf3ce44SJohn Forte * @param nodeId The object ID of the node whose alias is being set. 1276fcf3ce44SJohn Forte * @param newAlias A pointer to a Unicode string which contains the new node 1277fcf3ce44SJohn Forte * alias.If this parameter is NULL then the current alias is deleted, in 1278fcf3ce44SJohn Forte * which case the specified node no longer has an alias. 1279fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful or if 1280fcf3ce44SJohn Forte * an error occurred. 1281fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the node's alias has been successfully set. 1282fcf3ce44SJohn Forte * @retval IMA_STATUS_REBOOT_NECESSARY A reboot is necessary before 1283fcf3ce44SJohn Forte * the setting of the 1284fcf3ce44SJohn Forte * alias actually takes affect. 1285fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_OBJECT_TYPE Returned if @a nodeId does not 1286fcf3ce44SJohn Forte * specify any valid object type. 1287fcf3ce44SJohn Forte * @retval IMA_ERROR_INCORRECT_OBJECT_TYPE Returned if @a nodeId does not 1288fcf3ce44SJohn Forte * specify a node object. 1289fcf3ce44SJohn Forte * @retval IMA_ERROR_OBJECT_NOT_FOUND Returned if @a nodeId does not specify 1290fcf3ce44SJohn Forte * a node which is currently known to the system. 1291fcf3ce44SJohn Forte * @retval IMA_ERROR_NAME_TOO_LONG Returned if @a newAlias contains too many 1292fcf3ce44SJohn Forte * characters. 1293fcf3ce44SJohn Forte */ 1294fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetNodeAlias( 1295fcf3ce44SJohn Forte IMA_OID nodeOid, 1296fcf3ce44SJohn Forte const IMA_NODE_ALIAS newAlias) { 1297fcf3ce44SJohn Forte IMA_SetNodeAliasFn PassFunc; 1298fcf3ce44SJohn Forte IMA_UINT i; 1299fcf3ce44SJohn Forte IMA_STATUS status; 1300fcf3ce44SJohn Forte 1301fcf3ce44SJohn Forte if (number_of_plugins == -1) 1302fcf3ce44SJohn Forte InitLibrary(); 1303fcf3ce44SJohn Forte 1304fcf3ce44SJohn Forte if (newAlias == NULL) 1305fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 1306fcf3ce44SJohn Forte 1307fcf3ce44SJohn Forte if (wcslen(newAlias) > IMA_NODE_ALIAS_LEN - 1) 1308fcf3ce44SJohn Forte return (IMA_ERROR_NAME_TOO_LONG); 1309fcf3ce44SJohn Forte 1310fcf3ce44SJohn Forte if (nodeOid.objectType != IMA_OBJECT_TYPE_NODE) 1311fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 1312fcf3ce44SJohn Forte 1313fcf3ce44SJohn Forte if ((nodeOid.ownerId == RL_LIBRARY_SEQNUM) && 1314fcf3ce44SJohn Forte (nodeOid.objectSequenceNumber == RL_SHARED_NODE_SEQNUM)) { 1315fcf3ce44SJohn Forte #if defined(SOLARIS) 1316fcf3ce44SJohn Forte if (setSolarisSharedNodeAlias(newAlias) != IMA_STATUS_SUCCESS) { 1317fcf3ce44SJohn Forte return (IMA_ERROR_UNKNOWN_ERROR); 1318fcf3ce44SJohn Forte } 1319fcf3ce44SJohn Forte #endif 1320fcf3ce44SJohn Forte os_obtainmutex(libMutex); 1321fcf3ce44SJohn Forte if (wcslen(newAlias) > 0 && newAlias != NULL) 1322fcf3ce44SJohn Forte libSwprintf(sharedNodeAlias, L"%ls", newAlias); 1323fcf3ce44SJohn Forte else 1324fcf3ce44SJohn Forte libSwprintf(sharedNodeAlias, L"%ls", ""); 1325fcf3ce44SJohn Forte 1326fcf3ce44SJohn Forte os_releasemutex(libMutex); 1327fcf3ce44SJohn Forte return (IMA_STATUS_SUCCESS); 1328fcf3ce44SJohn Forte } 1329fcf3ce44SJohn Forte 1330fcf3ce44SJohn Forte os_obtainmutex(libMutex); 1331fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 1332fcf3ce44SJohn Forte 1333fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 1334fcf3ce44SJohn Forte if (plugintable[i].ownerId == nodeOid.ownerId) { 1335fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 1336fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 1337fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 1338fcf3ce44SJohn Forte #ifdef WIN32 1339fcf3ce44SJohn Forte PassFunc = (IMA_SetNodeAliasFn) 1340fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 1341fcf3ce44SJohn Forte "IMA_SetNodeAlias"); 1342fcf3ce44SJohn Forte #else 1343fcf3ce44SJohn Forte PassFunc = (IMA_SetNodeAliasFn) 1344fcf3ce44SJohn Forte dlsym( 1345fcf3ce44SJohn Forte plugintable[i].hPlugin, 1346fcf3ce44SJohn Forte "IMA_SetNodeAlias"); 1347fcf3ce44SJohn Forte #endif 1348fcf3ce44SJohn Forte 1349fcf3ce44SJohn Forte if (PassFunc != NULL) { 1350fcf3ce44SJohn Forte status = PassFunc(nodeOid, newAlias); 1351fcf3ce44SJohn Forte } 1352fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 1353fcf3ce44SJohn Forte } 1354fcf3ce44SJohn Forte 1355fcf3ce44SJohn Forte break; 1356fcf3ce44SJohn Forte } 1357fcf3ce44SJohn Forte } 1358fcf3ce44SJohn Forte os_releasemutex(libMutex); 1359fcf3ce44SJohn Forte return (status); 1360fcf3ce44SJohn Forte } 1361fcf3ce44SJohn Forte 1362fcf3ce44SJohn Forte 1363fcf3ce44SJohn Forte 1364fcf3ce44SJohn Forte 1365fcf3ce44SJohn Forte /* 1366fcf3ce44SJohn Forte * Gets a list of the object IDs of all the logical HBAs in the system. 1367fcf3ce44SJohn Forte * 1368fcf3ce44SJohn Forte * @param ppList A pointer to a pointer to an @ref IMA_OID_LIST structure. 1369fcf3ce44SJohn Forte * on successful return this will contain a pointer to an 1370fcf3ce44SJohn Forte * @ref IMA_OID_LIST which contains the object IDs of all of the 1371fcf3ce44SJohn Forte * LHBAs currently in the system. 1372fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful or if 1373fcf3ce44SJohn Forte * an error occurred. 1374fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the LHBA ID list has been successfully 1375fcf3ce44SJohn Forte * returned. 1376fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a ppList is NULL or 1377fcf3ce44SJohn Forte * specifies a 1378fcf3ce44SJohn Forte * memory area to which data cannot be written. 1379fcf3ce44SJohn Forte */ 1380fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetLhbaOidList( 1381fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 1382fcf3ce44SJohn Forte IMA_GetLhbaOidListFn PassFunc; 1383fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 1384fcf3ce44SJohn Forte 1385fcf3ce44SJohn Forte IMA_UINT i; 1386fcf3ce44SJohn Forte IMA_UINT j; 1387fcf3ce44SJohn Forte IMA_UINT totalIdCount; 1388fcf3ce44SJohn Forte IMA_STATUS status; 1389fcf3ce44SJohn Forte 1390fcf3ce44SJohn Forte if (number_of_plugins == -1) 1391fcf3ce44SJohn Forte InitLibrary(); 1392fcf3ce44SJohn Forte 1393fcf3ce44SJohn Forte if (ppList == NULL) 1394fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 1395fcf3ce44SJohn Forte 1396fcf3ce44SJohn Forte os_obtainmutex(libMutex); 1397fcf3ce44SJohn Forte // Get total id count first 1398fcf3ce44SJohn Forte totalIdCount = 0; 1399fcf3ce44SJohn Forte 1400fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 1401fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 1402fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 1403fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 1404fcf3ce44SJohn Forte #ifdef WIN32 1405fcf3ce44SJohn Forte PassFunc = (IMA_GetLhbaOidListFn) 1406fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 1407fcf3ce44SJohn Forte "IMA_GetLhbaOidList"); 1408fcf3ce44SJohn Forte #else 1409fcf3ce44SJohn Forte PassFunc = (IMA_GetLhbaOidListFn) 1410fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1411fcf3ce44SJohn Forte "IMA_GetLhbaOidList"); 1412fcf3ce44SJohn Forte #endif 1413fcf3ce44SJohn Forte if (PassFunc != NULL) { 1414fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 1415fcf3ce44SJohn Forte status = PassFunc(&ppOidList); 1416fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 1417fcf3ce44SJohn Forte totalIdCount += ppOidList->oidCount; 1418fcf3ce44SJohn Forte #ifdef WIN32 1419fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1420fcf3ce44SJohn Forte GetProcAddress( 1421fcf3ce44SJohn Forte plugintable[i].hPlugin, 1422fcf3ce44SJohn Forte "IMA_FreeMemory"); 1423fcf3ce44SJohn Forte #else 1424fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1425fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1426fcf3ce44SJohn Forte "IMA_FreeMemory"); 1427fcf3ce44SJohn Forte #endif 1428fcf3ce44SJohn Forte if (FreeFunc != NULL) { 1429fcf3ce44SJohn Forte FreeFunc(ppOidList); 1430fcf3ce44SJohn Forte } 1431fcf3ce44SJohn Forte } 1432fcf3ce44SJohn Forte 1433fcf3ce44SJohn Forte } 1434fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 1435fcf3ce44SJohn Forte } 1436fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 1437fcf3ce44SJohn Forte break; 1438fcf3ce44SJohn Forte } 1439fcf3ce44SJohn Forte } 1440fcf3ce44SJohn Forte 1441fcf3ce44SJohn Forte 1442fcf3ce44SJohn Forte *ppList = (IMA_OID_LIST*)calloc(1, sizeof (IMA_OID_LIST) + 1443fcf3ce44SJohn Forte (totalIdCount - 1) * sizeof (IMA_OID)); 1444fcf3ce44SJohn Forte 1445fcf3ce44SJohn Forte if ((*ppList) == NULL) { 1446fcf3ce44SJohn Forte os_releasemutex(libMutex); 1447fcf3ce44SJohn Forte return (IMA_ERROR_UNEXPECTED_OS_ERROR); 1448fcf3ce44SJohn Forte } 1449fcf3ce44SJohn Forte (*ppList)->oidCount = totalIdCount; 1450fcf3ce44SJohn Forte 1451fcf3ce44SJohn Forte // 2nd pass to copy the id lists 1452fcf3ce44SJohn Forte totalIdCount = 0; 1453fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 1454fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 1455fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 1456fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 1457fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 1458fcf3ce44SJohn Forte #ifdef WIN32 1459fcf3ce44SJohn Forte PassFunc = (IMA_GetLhbaOidListFn) 1460fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 1461fcf3ce44SJohn Forte "IMA_GetLhbaOidList"); 1462fcf3ce44SJohn Forte #else 1463fcf3ce44SJohn Forte PassFunc = (IMA_GetLhbaOidListFn) 1464fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1465fcf3ce44SJohn Forte "IMA_GetLhbaOidList"); 1466fcf3ce44SJohn Forte #endif 1467fcf3ce44SJohn Forte if (PassFunc != NULL) { 1468fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 1469fcf3ce44SJohn Forte status = PassFunc(&ppOidList); 1470fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 1471fcf3ce44SJohn Forte for (j = 0; 1472fcf3ce44SJohn Forte (j < ppOidList->oidCount) && 1473fcf3ce44SJohn Forte (totalIdCount < 1474fcf3ce44SJohn Forte (*ppList)->oidCount); 1475fcf3ce44SJohn Forte j++) { 1476fcf3ce44SJohn Forte (*ppList)->oids[totalIdCount]. 1477fcf3ce44SJohn Forte objectType 1478fcf3ce44SJohn Forte = ppOidList->oids[j]. 1479fcf3ce44SJohn Forte objectType; 1480fcf3ce44SJohn Forte (*ppList)->oids[totalIdCount]. 1481fcf3ce44SJohn Forte objectSequenceNumber = 1482fcf3ce44SJohn Forte ppOidList->oids[j]. 1483fcf3ce44SJohn Forte objectSequenceNumber; 1484fcf3ce44SJohn Forte (*ppList)->oids[totalIdCount]. 1485fcf3ce44SJohn Forte ownerId = 1486fcf3ce44SJohn Forte ppOidList->oids[j].ownerId; 1487fcf3ce44SJohn Forte totalIdCount++; 1488fcf3ce44SJohn Forte } 1489fcf3ce44SJohn Forte #ifdef WIN32 1490fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1491fcf3ce44SJohn Forte GetProcAddress( 1492fcf3ce44SJohn Forte plugintable[i].hPlugin, 1493fcf3ce44SJohn Forte "IMA_FreeMemory"); 1494fcf3ce44SJohn Forte #else 1495fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1496fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1497fcf3ce44SJohn Forte "IMA_FreeMemory"); 1498fcf3ce44SJohn Forte #endif 1499fcf3ce44SJohn Forte if (FreeFunc != NULL) { 1500fcf3ce44SJohn Forte FreeFunc(ppOidList); 1501fcf3ce44SJohn Forte } 1502fcf3ce44SJohn Forte } 1503fcf3ce44SJohn Forte } 1504fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 1505fcf3ce44SJohn Forte } 1506fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 1507fcf3ce44SJohn Forte free(*ppList); 1508fcf3ce44SJohn Forte break; 1509fcf3ce44SJohn Forte } 1510fcf3ce44SJohn Forte 1511fcf3ce44SJohn Forte } 1512fcf3ce44SJohn Forte os_releasemutex(libMutex); 1513fcf3ce44SJohn Forte return (status); 1514fcf3ce44SJohn Forte } 1515fcf3ce44SJohn Forte 1516fcf3ce44SJohn Forte 1517fcf3ce44SJohn Forte 1518fcf3ce44SJohn Forte 1519fcf3ce44SJohn Forte /* 1520fcf3ce44SJohn Forte * Gets the properties of the specified logical HBA. 1521fcf3ce44SJohn Forte * 1522fcf3ce44SJohn Forte * @param lhbaId The object ID of the LHBA whose properties are being 1523fcf3ce44SJohn Forte * retrieved. 1524fcf3ce44SJohn Forte * @param pProps A pointer to an @ref IMA_LHBA_PROPERTIES structure. 1525fcf3ce44SJohn Forte * On successful 1526fcf3ce44SJohn Forte * return this will contain the properties of the LHBA specified by 1527fcf3ce44SJohn Forte * @a lhbaId. 1528fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful or if 1529fcf3ce44SJohn Forte * an error occurred. 1530fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the properties of the specified LHBA 1531fcf3ce44SJohn Forte * have been successfully retrieved. 1532fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a pProps is NULL or 1533fcf3ce44SJohn Forte * specify a memory area to which data cannot be written. 1534fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_OBJECT_TYPE Returned if @a lhbaId does not 1535fcf3ce44SJohn Forte * specify any valid object type. 1536fcf3ce44SJohn Forte * @retval IMA_ERROR_INCORRECT_OBJECT_TYPE Returned if @a lhbaId does not 1537fcf3ce44SJohn Forte * specify a LHBA. 1538fcf3ce44SJohn Forte * @retval IMA_ERROR_OBJECT_NOT_FOUND Returned if @a lhbaId does not 1539fcf3ce44SJohn Forte * specify a LHBA which is currently known to the system. 1540fcf3ce44SJohn Forte */ 1541fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetLhbaProperties( 1542fcf3ce44SJohn Forte IMA_OID lhbaId, 1543fcf3ce44SJohn Forte IMA_LHBA_PROPERTIES *pProps) { 1544fcf3ce44SJohn Forte IMA_GetLhbaPropertiesFn PassFunc; 1545fcf3ce44SJohn Forte IMA_UINT i; 1546fcf3ce44SJohn Forte IMA_STATUS status; 1547fcf3ce44SJohn Forte 1548fcf3ce44SJohn Forte if (number_of_plugins == -1) 1549fcf3ce44SJohn Forte InitLibrary(); 1550fcf3ce44SJohn Forte 1551fcf3ce44SJohn Forte if (pProps == NULL) 1552fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 1553fcf3ce44SJohn Forte 1554fcf3ce44SJohn Forte if (lhbaId.objectType != IMA_OBJECT_TYPE_LHBA) 1555fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 1556fcf3ce44SJohn Forte 1557fcf3ce44SJohn Forte os_obtainmutex(libMutex); 1558fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 1559fcf3ce44SJohn Forte 1560fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 1561fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaId.ownerId) { 1562fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 1563fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 1564fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 1565fcf3ce44SJohn Forte #ifdef WIN32 1566fcf3ce44SJohn Forte PassFunc = (IMA_GetLhbaPropertiesFn) 1567fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 1568fcf3ce44SJohn Forte "IMA_GetLhbaProperties"); 1569fcf3ce44SJohn Forte #else 1570fcf3ce44SJohn Forte PassFunc = (IMA_GetLhbaPropertiesFn) 1571fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1572fcf3ce44SJohn Forte "IMA_GetLhbaProperties"); 1573fcf3ce44SJohn Forte #endif 1574fcf3ce44SJohn Forte 1575fcf3ce44SJohn Forte if (PassFunc != NULL) { 1576fcf3ce44SJohn Forte status = PassFunc(lhbaId, pProps); 1577fcf3ce44SJohn Forte } 1578fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 1579fcf3ce44SJohn Forte } 1580fcf3ce44SJohn Forte 1581fcf3ce44SJohn Forte break; 1582fcf3ce44SJohn Forte } 1583fcf3ce44SJohn Forte } 1584fcf3ce44SJohn Forte os_releasemutex(libMutex); 1585fcf3ce44SJohn Forte return (status); 1586fcf3ce44SJohn Forte } 1587fcf3ce44SJohn Forte 1588fcf3ce44SJohn Forte 1589fcf3ce44SJohn Forte 1590fcf3ce44SJohn Forte 1591fcf3ce44SJohn Forte /* 1592fcf3ce44SJohn Forte * Gets a list of the object IDs of all the physical HBAs in the system. 1593fcf3ce44SJohn Forte * 1594fcf3ce44SJohn Forte * @param ppList A pointer to a pointer to an @ref IMA_OID_LIST structure. 1595fcf3ce44SJohn Forte * on successful return this will contain a pointer to an 1596fcf3ce44SJohn Forte * @ref IMA_OID_LIST which contains the object IDs of all of the 1597fcf3ce44SJohn Forte * PHBAs currently in the system. 1598fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation was successful or if 1599fcf3ce44SJohn Forte * an error occurred. 1600fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the PHBA ID list has been successfully 1601fcf3ce44SJohn Forte * returned. 1602fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a ppList is NULL or 1603fcf3ce44SJohn Forte * specify a memory area to which data cannot be written. 1604fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the properties of the specified PHBA 1605fcf3ce44SJohn Forte * have been successfully retrieved. 1606fcf3ce44SJohn Forte * @retval IMA_ERROR_OBJECT_NOT_FOUND Returned if @a phbaId does not 1607fcf3ce44SJohn Forte * specify a PHBA which is currently known to the system. 1608fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if @a ppList is NULL or 1609fcf3ce44SJohn Forte * specify a memory area to which data cannot be written. 1610fcf3ce44SJohn Forte */ 1611fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetPhbaOidList( 1612fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 1613fcf3ce44SJohn Forte IMA_GetPhbaOidListFn PassFunc; 1614fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 1615fcf3ce44SJohn Forte 1616fcf3ce44SJohn Forte IMA_UINT i; 1617fcf3ce44SJohn Forte IMA_UINT j; 1618fcf3ce44SJohn Forte IMA_UINT totalIdCount; 1619fcf3ce44SJohn Forte IMA_STATUS status; 1620fcf3ce44SJohn Forte 1621fcf3ce44SJohn Forte if (number_of_plugins == -1) 1622fcf3ce44SJohn Forte InitLibrary(); 1623fcf3ce44SJohn Forte 1624fcf3ce44SJohn Forte if (ppList == NULL) 1625fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 1626fcf3ce44SJohn Forte 1627fcf3ce44SJohn Forte os_obtainmutex(libMutex); 1628fcf3ce44SJohn Forte // Get total id count first 1629fcf3ce44SJohn Forte totalIdCount = 0; 1630fcf3ce44SJohn Forte 1631fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 1632fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 1633fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 1634fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 1635fcf3ce44SJohn Forte #ifdef WIN32 1636fcf3ce44SJohn Forte PassFunc = (IMA_GetPhbaOidListFn) 1637fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 1638fcf3ce44SJohn Forte "IMA_GetPhbaOidList"); 1639fcf3ce44SJohn Forte #else 1640fcf3ce44SJohn Forte PassFunc = (IMA_GetPhbaOidListFn) 1641fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1642fcf3ce44SJohn Forte "IMA_GetPhbaOidList"); 1643fcf3ce44SJohn Forte #endif 1644fcf3ce44SJohn Forte if (PassFunc != NULL) { 1645fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 1646fcf3ce44SJohn Forte status = PassFunc(&ppOidList); 1647fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 1648fcf3ce44SJohn Forte totalIdCount += ppOidList->oidCount; 1649fcf3ce44SJohn Forte #ifdef WIN32 1650fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1651fcf3ce44SJohn Forte GetProcAddress( 1652fcf3ce44SJohn Forte plugintable[i].hPlugin, 1653fcf3ce44SJohn Forte "IMA_FreeMemory"); 1654fcf3ce44SJohn Forte #else 1655fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1656fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1657fcf3ce44SJohn Forte "IMA_FreeMemory"); 1658fcf3ce44SJohn Forte #endif 1659fcf3ce44SJohn Forte if (FreeFunc != NULL) { 1660fcf3ce44SJohn Forte FreeFunc(ppOidList); 1661fcf3ce44SJohn Forte } 1662fcf3ce44SJohn Forte } 1663fcf3ce44SJohn Forte } 1664fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 1665fcf3ce44SJohn Forte } 1666fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 1667fcf3ce44SJohn Forte break; 1668fcf3ce44SJohn Forte } 1669fcf3ce44SJohn Forte 1670fcf3ce44SJohn Forte } 1671fcf3ce44SJohn Forte 1672fcf3ce44SJohn Forte 1673fcf3ce44SJohn Forte *ppList = (IMA_OID_LIST*)calloc(1, sizeof (IMA_OID_LIST) + 1674fcf3ce44SJohn Forte (totalIdCount - 1) * sizeof (IMA_OID)); 1675fcf3ce44SJohn Forte 1676fcf3ce44SJohn Forte if ((*ppList) == NULL) { 1677fcf3ce44SJohn Forte os_releasemutex(libMutex); 1678fcf3ce44SJohn Forte return (IMA_ERROR_UNEXPECTED_OS_ERROR); 1679fcf3ce44SJohn Forte } 1680fcf3ce44SJohn Forte 1681fcf3ce44SJohn Forte (*ppList)->oidCount = totalIdCount; 1682fcf3ce44SJohn Forte 1683fcf3ce44SJohn Forte // 2nd pass to copy the id lists 1684fcf3ce44SJohn Forte totalIdCount = 0; 1685fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 1686fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 1687fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 1688fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 1689fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 1690fcf3ce44SJohn Forte #ifdef WIN32 1691fcf3ce44SJohn Forte PassFunc = (IMA_GetPhbaOidListFn) 1692fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 1693fcf3ce44SJohn Forte "IMA_GetPhbaOidList"); 1694fcf3ce44SJohn Forte #else 1695fcf3ce44SJohn Forte PassFunc = (IMA_GetPhbaOidListFn) 1696fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1697fcf3ce44SJohn Forte "IMA_GetPhbaOidList"); 1698fcf3ce44SJohn Forte #endif 1699fcf3ce44SJohn Forte if (PassFunc != NULL) { 1700fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 1701fcf3ce44SJohn Forte status = PassFunc(&ppOidList); 1702fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 1703fcf3ce44SJohn Forte for (j = 0; 1704fcf3ce44SJohn Forte (j < ppOidList->oidCount) && 1705fcf3ce44SJohn Forte (totalIdCount < 1706fcf3ce44SJohn Forte (*ppList)->oidCount); 1707fcf3ce44SJohn Forte j++) { 1708fcf3ce44SJohn Forte (*ppList)->oids[totalIdCount]. 1709fcf3ce44SJohn Forte objectType = 1710fcf3ce44SJohn Forte ppOidList->oids[j]. 1711fcf3ce44SJohn Forte objectType; 1712fcf3ce44SJohn Forte (*ppList)->oids[totalIdCount]. 1713fcf3ce44SJohn Forte objectSequenceNumber = 1714fcf3ce44SJohn Forte ppOidList->oids[j]. 1715fcf3ce44SJohn Forte objectSequenceNumber; 1716fcf3ce44SJohn Forte (*ppList)->oids[totalIdCount]. 1717fcf3ce44SJohn Forte ownerId = 1718fcf3ce44SJohn Forte ppOidList->oids[j].ownerId; 1719fcf3ce44SJohn Forte totalIdCount++; 1720fcf3ce44SJohn Forte } 1721fcf3ce44SJohn Forte #ifdef WIN32 1722fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1723fcf3ce44SJohn Forte GetProcAddress 1724fcf3ce44SJohn Forte (plugintable[i].hPlugin, 1725fcf3ce44SJohn Forte "IMA_FreeMemory"); 1726fcf3ce44SJohn Forte #else 1727fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1728fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1729fcf3ce44SJohn Forte "IMA_FreeMemory"); 1730fcf3ce44SJohn Forte #endif 1731fcf3ce44SJohn Forte if (FreeFunc != NULL) { 1732fcf3ce44SJohn Forte FreeFunc(ppOidList); 1733fcf3ce44SJohn Forte } 1734fcf3ce44SJohn Forte } 1735fcf3ce44SJohn Forte } 1736fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 1737fcf3ce44SJohn Forte } 1738fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 1739fcf3ce44SJohn Forte free(*ppList); 1740fcf3ce44SJohn Forte break; 1741fcf3ce44SJohn Forte } 1742fcf3ce44SJohn Forte } 1743fcf3ce44SJohn Forte os_releasemutex(libMutex); 1744fcf3ce44SJohn Forte return (status); 1745fcf3ce44SJohn Forte } 1746fcf3ce44SJohn Forte 1747fcf3ce44SJohn Forte 1748fcf3ce44SJohn Forte /* 1749fcf3ce44SJohn Forte * Gets the general properties of a physical HBA. 1750fcf3ce44SJohn Forte * 1751fcf3ce44SJohn Forte * @param phbaId The object ID of the PHBA whose 1752fcf3ce44SJohn Forte * properties are being queried. 1753fcf3ce44SJohn Forte * @param pProps A pointer to an @ref 1754fcf3ce44SJohn Forte * IMA_PHBA_PROPERTIES structure. On successful 1755fcf3ce44SJohn Forte * return this will contain the properties of 1756fcf3ce44SJohn Forte * the PHBA specified by @a phbaId. 1757fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the 1758fcf3ce44SJohn Forte * operation was successful or if an error 1759fcf3ce44SJohn Forte * occurred. 1760fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the properties 1761fcf3ce44SJohn Forte * of the specified PHBA have been 1762fcf3ce44SJohn Forte * successfully retrieved. 1763fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned 1764fcf3ce44SJohn Forte * if @a pProps is NULL or specifies a 1765fcf3ce44SJohn Forte * memory area to which data cannot be written. 1766fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_OBJECT_TYPE Returned 1767fcf3ce44SJohn Forte * if @a phbaId does not specify any 1768fcf3ce44SJohn Forte * valid object type. 1769fcf3ce44SJohn Forte * @retval IMA_ERROR_INCORRECT_OBJECT_TYPE Returned 1770fcf3ce44SJohn Forte * if @a phbaId does not specify a 1771fcf3ce44SJohn Forte * PHBA. 1772fcf3ce44SJohn Forte * @retval IMA_ERROR_OBJECT_NOT_FOUND Returned 1773fcf3ce44SJohn Forte * if @a phbaId does not specify a PHBA 1774fcf3ce44SJohn Forte * which is currently known to the system. 1775fcf3ce44SJohn Forte */ 1776fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetPhbaProperties( 1777fcf3ce44SJohn Forte IMA_OID phbaId, 1778fcf3ce44SJohn Forte IMA_PHBA_PROPERTIES *pProps) { 1779fcf3ce44SJohn Forte IMA_GetPhbaPropertiesFn PassFunc; 1780fcf3ce44SJohn Forte IMA_UINT i; 1781fcf3ce44SJohn Forte IMA_STATUS status; 1782fcf3ce44SJohn Forte 1783fcf3ce44SJohn Forte if (number_of_plugins == -1) 1784fcf3ce44SJohn Forte InitLibrary(); 1785fcf3ce44SJohn Forte 1786fcf3ce44SJohn Forte if (pProps == NULL) 1787fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 1788fcf3ce44SJohn Forte 1789fcf3ce44SJohn Forte if (phbaId.objectType != IMA_OBJECT_TYPE_PHBA) 1790fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 1791fcf3ce44SJohn Forte 1792fcf3ce44SJohn Forte os_obtainmutex(libMutex); 1793fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 1794fcf3ce44SJohn Forte 1795fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 1796fcf3ce44SJohn Forte if (plugintable[i].ownerId == phbaId.ownerId) { 1797fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 1798fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 1799fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 1800fcf3ce44SJohn Forte #ifdef WIN32 1801fcf3ce44SJohn Forte PassFunc = (IMA_GetPhbaPropertiesFn) 1802fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 1803fcf3ce44SJohn Forte "IMA_GetPhbaProperties"); 1804fcf3ce44SJohn Forte #else 1805fcf3ce44SJohn Forte PassFunc = (IMA_GetPhbaPropertiesFn) 1806fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1807fcf3ce44SJohn Forte "IMA_GetPhbaProperties"); 1808fcf3ce44SJohn Forte #endif 1809fcf3ce44SJohn Forte 1810fcf3ce44SJohn Forte if (PassFunc != NULL) { 1811fcf3ce44SJohn Forte status = PassFunc(phbaId, pProps); 1812fcf3ce44SJohn Forte } 1813fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 1814fcf3ce44SJohn Forte } 1815fcf3ce44SJohn Forte 1816fcf3ce44SJohn Forte break; 1817fcf3ce44SJohn Forte } 1818fcf3ce44SJohn Forte } 1819fcf3ce44SJohn Forte os_releasemutex(libMutex); 1820fcf3ce44SJohn Forte return (status); 1821fcf3ce44SJohn Forte } 1822fcf3ce44SJohn Forte 1823fcf3ce44SJohn Forte /* 1824fcf3ce44SJohn Forte * Frees a previously allocated IMA_OID_LIST structure. 1825fcf3ce44SJohn Forte * 1826fcf3ce44SJohn Forte * @param pList A pointer to an @ref IMA_OID_LIST 1827fcf3ce44SJohn Forte * structure allocated by the 1828fcf3ce44SJohn Forte * library. On successful return the memory 1829fcf3ce44SJohn Forte * allocated by the list is freed. 1830fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation 1831fcf3ce44SJohn Forte * was successful or if an error occurred. 1832fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the specified object 1833fcf3ce44SJohn Forte * ID list was successfully freed. 1834fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned 1835fcf3ce44SJohn Forte * if @a pList is NULL or specifies a 1836fcf3ce44SJohn Forte * memory area from which data cannot be read. 1837fcf3ce44SJohn Forte */ 1838fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_FreeMemory( 1839fcf3ce44SJohn Forte void *pMemory) { 1840fcf3ce44SJohn Forte if (pMemory == NULL) 1841fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 1842fcf3ce44SJohn Forte free(pMemory); 1843fcf3ce44SJohn Forte return (IMA_STATUS_SUCCESS); 1844fcf3ce44SJohn Forte } 1845fcf3ce44SJohn Forte 1846fcf3ce44SJohn Forte 1847fcf3ce44SJohn Forte 1848fcf3ce44SJohn Forte 1849fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetNonSharedNodeOidList( 1850fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 1851fcf3ce44SJohn Forte IMA_GetNonSharedNodeOidListFn PassFunc; 1852fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 1853fcf3ce44SJohn Forte 1854fcf3ce44SJohn Forte IMA_UINT i; 1855fcf3ce44SJohn Forte IMA_UINT j; 1856fcf3ce44SJohn Forte IMA_UINT totalIdCount; 1857fcf3ce44SJohn Forte IMA_STATUS status; 1858fcf3ce44SJohn Forte 1859fcf3ce44SJohn Forte if (number_of_plugins == -1) 1860fcf3ce44SJohn Forte InitLibrary(); 1861fcf3ce44SJohn Forte 1862fcf3ce44SJohn Forte if (ppList == NULL) 1863fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 1864fcf3ce44SJohn Forte 1865fcf3ce44SJohn Forte os_obtainmutex(libMutex); 1866fcf3ce44SJohn Forte // Get total id count first 1867fcf3ce44SJohn Forte totalIdCount = 0; 1868fcf3ce44SJohn Forte 1869fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 1870fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 1871fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 1872fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 1873fcf3ce44SJohn Forte #ifdef WIN32 1874fcf3ce44SJohn Forte PassFunc = (IMA_GetNonSharedNodeOidListFn) 1875fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 1876fcf3ce44SJohn Forte "IMA_GetNonSharedNodeOidList"); 1877fcf3ce44SJohn Forte #else 1878fcf3ce44SJohn Forte PassFunc = (IMA_GetNonSharedNodeOidListFn) 1879fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1880fcf3ce44SJohn Forte "IMA_GetNonSharedNodeOidList"); 1881fcf3ce44SJohn Forte #endif 1882fcf3ce44SJohn Forte if (PassFunc != NULL) { 1883fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 1884fcf3ce44SJohn Forte status = PassFunc(&ppOidList); 1885fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 1886fcf3ce44SJohn Forte totalIdCount += ppOidList->oidCount; 1887fcf3ce44SJohn Forte #ifdef WIN32 1888fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1889fcf3ce44SJohn Forte GetProcAddress( 1890fcf3ce44SJohn Forte plugintable[i].hPlugin, 1891fcf3ce44SJohn Forte "IMA_FreeMemory"); 1892fcf3ce44SJohn Forte #else 1893fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1894fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1895fcf3ce44SJohn Forte "IMA_FreeMemory"); 1896fcf3ce44SJohn Forte #endif 1897fcf3ce44SJohn Forte if (FreeFunc != NULL) { 1898fcf3ce44SJohn Forte FreeFunc(ppOidList); 1899fcf3ce44SJohn Forte } 1900fcf3ce44SJohn Forte } 1901fcf3ce44SJohn Forte } 1902fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 1903fcf3ce44SJohn Forte } 1904fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 1905fcf3ce44SJohn Forte break; 1906fcf3ce44SJohn Forte } 1907fcf3ce44SJohn Forte 1908fcf3ce44SJohn Forte } 1909fcf3ce44SJohn Forte 1910fcf3ce44SJohn Forte *ppList = (IMA_OID_LIST*)calloc(1, sizeof (IMA_OID_LIST) + 1911fcf3ce44SJohn Forte (totalIdCount - 1) * sizeof (IMA_OID)); 1912fcf3ce44SJohn Forte 1913fcf3ce44SJohn Forte if ((*ppList) == NULL) { 1914fcf3ce44SJohn Forte os_releasemutex(libMutex); 1915fcf3ce44SJohn Forte return (IMA_ERROR_UNEXPECTED_OS_ERROR); 1916fcf3ce44SJohn Forte } 1917fcf3ce44SJohn Forte 1918fcf3ce44SJohn Forte (*ppList)->oidCount = totalIdCount; 1919fcf3ce44SJohn Forte 1920fcf3ce44SJohn Forte // 2nd pass to copy the id lists 1921fcf3ce44SJohn Forte totalIdCount = 0; 1922fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 1923fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 1924fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 1925fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 1926fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 1927fcf3ce44SJohn Forte #ifdef WIN32 1928fcf3ce44SJohn Forte PassFunc = (IMA_GetNonSharedNodeOidListFn) 1929fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 1930fcf3ce44SJohn Forte "IMA_GetNonSharedNodeOidList"); 1931fcf3ce44SJohn Forte #else 1932fcf3ce44SJohn Forte PassFunc = (IMA_GetNonSharedNodeOidListFn) 1933fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1934fcf3ce44SJohn Forte "IMA_GetNonSharedNodeOidList"); 1935fcf3ce44SJohn Forte #endif 1936fcf3ce44SJohn Forte if (PassFunc != NULL) { 1937fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 1938fcf3ce44SJohn Forte status = PassFunc(&ppOidList); 1939fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 1940fcf3ce44SJohn Forte for (j = 0; 1941fcf3ce44SJohn Forte (j < ppOidList->oidCount) && 1942fcf3ce44SJohn Forte (totalIdCount < ( 1943fcf3ce44SJohn Forte *ppList)->oidCount); 1944fcf3ce44SJohn Forte j++) { 1945fcf3ce44SJohn Forte (*ppList)->oids[ 1946fcf3ce44SJohn Forte totalIdCount].objectType = 1947fcf3ce44SJohn Forte ppOidList->oids[j]. 1948fcf3ce44SJohn Forte objectType; 1949fcf3ce44SJohn Forte (*ppList)->oids[totalIdCount]. 1950fcf3ce44SJohn Forte objectSequenceNumber = 1951fcf3ce44SJohn Forte ppOidList->oids[j]. 1952fcf3ce44SJohn Forte objectSequenceNumber; 1953fcf3ce44SJohn Forte (*ppList)->oids[ 1954fcf3ce44SJohn Forte totalIdCount]. 1955fcf3ce44SJohn Forte ownerId = 1956fcf3ce44SJohn Forte ppOidList->oids[j]. 1957fcf3ce44SJohn Forte ownerId; 1958fcf3ce44SJohn Forte totalIdCount++; 1959fcf3ce44SJohn Forte } 1960fcf3ce44SJohn Forte #ifdef WIN32 1961fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1962fcf3ce44SJohn Forte GetProcAddress( 1963fcf3ce44SJohn Forte plugintable[i].hPlugin, 1964fcf3ce44SJohn Forte "IMA_FreeMemory"); 1965fcf3ce44SJohn Forte #else 1966fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 1967fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 1968fcf3ce44SJohn Forte "IMA_FreeMemory"); 1969fcf3ce44SJohn Forte #endif 1970fcf3ce44SJohn Forte if (FreeFunc != NULL) { 1971fcf3ce44SJohn Forte FreeFunc(ppOidList); 1972fcf3ce44SJohn Forte } 1973fcf3ce44SJohn Forte } 1974fcf3ce44SJohn Forte } 1975fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 1976fcf3ce44SJohn Forte } 1977fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 1978fcf3ce44SJohn Forte free(*ppList); 1979fcf3ce44SJohn Forte break; 1980fcf3ce44SJohn Forte } 1981fcf3ce44SJohn Forte } 1982fcf3ce44SJohn Forte os_releasemutex(libMutex); 1983fcf3ce44SJohn Forte return (status); 1984fcf3ce44SJohn Forte } 1985fcf3ce44SJohn Forte 1986fcf3ce44SJohn Forte 1987fcf3ce44SJohn Forte 1988fcf3ce44SJohn Forte /* 1989fcf3ce44SJohn Forte * Gets the first burst length properties of 1990fcf3ce44SJohn Forte * the specified logical HBA. 1991fcf3ce44SJohn Forte * 1992fcf3ce44SJohn Forte * @param lhbaId The object ID of the logical HBA 1993fcf3ce44SJohn Forte * to get the first burst length 1994fcf3ce44SJohn Forte * properties of. 1995fcf3ce44SJohn Forte * @param pProps A pointer to a min/max values 1996fcf3ce44SJohn Forte * structure. 1997fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation 1998fcf3ce44SJohn Forte * was successful or if an error 1999fcf3ce44SJohn Forte * occurred. 2000fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the first burst 2001fcf3ce44SJohn Forte * length properties have been 2002fcf3ce44SJohn Forte * successfully retrieved. 2003fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned 2004fcf3ce44SJohn Forte * if @a pProps is NULL or specifies a 2005fcf3ce44SJohn Forte * memory area to which data cannot be written. 2006fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_OBJECT_TYPE Returned 2007fcf3ce44SJohn Forte * if @a lhbaId does not specify any 2008fcf3ce44SJohn Forte * valid object type. 2009fcf3ce44SJohn Forte * @retval IMA_ERROR_INCORRECT_OBJECT_TYPE Returned 2010fcf3ce44SJohn Forte * if @a lhbaId does not specify a LHBA. 2011fcf3ce44SJohn Forte * @retval IMA_ERROR_OBJECT_NOT_FOUND Returned 2012fcf3ce44SJohn Forte * @a lhbaId does not specify a LHBA 2013fcf3ce44SJohn Forte * which is currently known to the system. 2014fcf3ce44SJohn Forte */ 2015fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetFirstBurstLengthProperties( 2016fcf3ce44SJohn Forte IMA_OID Oid, 2017fcf3ce44SJohn Forte IMA_MIN_MAX_VALUE *pProps) { 2018fcf3ce44SJohn Forte IMA_GetFirstBurstLengthPropertiesFn PassFunc; 2019fcf3ce44SJohn Forte IMA_UINT i; 2020fcf3ce44SJohn Forte IMA_STATUS status; 2021fcf3ce44SJohn Forte 2022fcf3ce44SJohn Forte if (number_of_plugins == -1) 2023fcf3ce44SJohn Forte InitLibrary(); 2024fcf3ce44SJohn Forte 2025fcf3ce44SJohn Forte if (pProps == NULL) 2026fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 2027fcf3ce44SJohn Forte 2028fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 2029fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 2030fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2031fcf3ce44SJohn Forte 2032fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2033fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2034fcf3ce44SJohn Forte 2035fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2036fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 2037fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2038fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2039fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2040fcf3ce44SJohn Forte #ifdef WIN32 2041fcf3ce44SJohn Forte PassFunc = 2042fcf3ce44SJohn Forte (IMA_GetFirstBurstLengthPropertiesFn) 2043fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2044fcf3ce44SJohn Forte "IMA_GetFirstBurstLengthProperties"); 2045fcf3ce44SJohn Forte #else 2046fcf3ce44SJohn Forte PassFunc = 2047fcf3ce44SJohn Forte (IMA_GetFirstBurstLengthPropertiesFn) 2048fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2049fcf3ce44SJohn Forte "IMA_GetFirstBurstLengthProperties"); 2050fcf3ce44SJohn Forte #endif 2051fcf3ce44SJohn Forte 2052fcf3ce44SJohn Forte if (PassFunc != NULL) { 2053fcf3ce44SJohn Forte status = PassFunc(Oid, pProps); 2054fcf3ce44SJohn Forte } 2055fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2056fcf3ce44SJohn Forte } 2057fcf3ce44SJohn Forte 2058fcf3ce44SJohn Forte break; 2059fcf3ce44SJohn Forte } 2060fcf3ce44SJohn Forte } 2061fcf3ce44SJohn Forte os_releasemutex(libMutex); 2062fcf3ce44SJohn Forte return (status); 2063fcf3ce44SJohn Forte } 2064fcf3ce44SJohn Forte 2065fcf3ce44SJohn Forte /* 2066fcf3ce44SJohn Forte * Gets the max burst length properties of the 2067fcf3ce44SJohn Forte * specified logical HBA. 2068fcf3ce44SJohn Forte * 2069fcf3ce44SJohn Forte * @param lhbaId The object ID of the logical HBA to 2070fcf3ce44SJohn Forte * get the max burst length properties of. 2071fcf3ce44SJohn Forte * @param pProps A pointer to an @ref IMA_MIN_MAX_VALUE 2072fcf3ce44SJohn Forte * structure allocated by the 2073fcf3ce44SJohn Forte * caller. On successful return this structure 2074fcf3ce44SJohn Forte * will contain the max 2075fcf3ce44SJohn Forte * burst length properties of this LHBA. 2076fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation 2077fcf3ce44SJohn Forte * was successful or if an error occurred. 2078fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the max burst 2079fcf3ce44SJohn Forte * length properties have been 2080fcf3ce44SJohn Forte * successfully retrieved. 2081fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned 2082fcf3ce44SJohn Forte * if @a pProps is NULL or specifies a 2083fcf3ce44SJohn Forte * memory area to which data cannot be written. 2084fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_OBJECT_TYPE Returned 2085fcf3ce44SJohn Forte * if @a lhbaId does not specify any 2086fcf3ce44SJohn Forte * valid object type. 2087fcf3ce44SJohn Forte * @retval IMA_ERROR_INCORRECT_OBJECT_TYPE Returned 2088fcf3ce44SJohn Forte * if @a lhbaId does not specify a HBA. 2089fcf3ce44SJohn Forte * @retval IMA_ERROR_OBJECT_NOT_FOUND Returned 2090fcf3ce44SJohn Forte * if @a lhbaId does not specify a LHBA 2091fcf3ce44SJohn Forte * which is currently known to the system. 2092fcf3ce44SJohn Forte */ 2093fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetMaxBurstLengthProperties( 2094fcf3ce44SJohn Forte IMA_OID Oid, 2095fcf3ce44SJohn Forte IMA_MIN_MAX_VALUE *pProps) { 2096fcf3ce44SJohn Forte IMA_GetMaxBurstLengthPropertiesFn PassFunc; 2097fcf3ce44SJohn Forte IMA_UINT i; 2098fcf3ce44SJohn Forte IMA_STATUS status; 2099fcf3ce44SJohn Forte 2100fcf3ce44SJohn Forte if (number_of_plugins == -1) 2101fcf3ce44SJohn Forte InitLibrary(); 2102fcf3ce44SJohn Forte 2103fcf3ce44SJohn Forte if (pProps == NULL) 2104fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 2105fcf3ce44SJohn Forte 2106fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 2107fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 2108fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2109fcf3ce44SJohn Forte 2110fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2111fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2112fcf3ce44SJohn Forte 2113fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2114fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 2115fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2116fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2117fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2118fcf3ce44SJohn Forte #ifdef WIN32 2119fcf3ce44SJohn Forte PassFunc = 2120fcf3ce44SJohn Forte (IMA_GetMaxBurstLengthPropertiesFn) 2121fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2122fcf3ce44SJohn Forte "IMA_GetMaxBurstLengthProperties"); 2123fcf3ce44SJohn Forte #else 2124fcf3ce44SJohn Forte PassFunc = 2125fcf3ce44SJohn Forte (IMA_GetMaxBurstLengthPropertiesFn) 2126fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2127fcf3ce44SJohn Forte "IMA_GetMaxBurstLengthProperties"); 2128fcf3ce44SJohn Forte #endif 2129fcf3ce44SJohn Forte if (PassFunc != NULL) { 2130fcf3ce44SJohn Forte status = PassFunc(Oid, pProps); 2131fcf3ce44SJohn Forte } 2132fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2133fcf3ce44SJohn Forte } 2134fcf3ce44SJohn Forte 2135fcf3ce44SJohn Forte break; 2136fcf3ce44SJohn Forte } 2137fcf3ce44SJohn Forte } 2138fcf3ce44SJohn Forte os_releasemutex(libMutex); 2139fcf3ce44SJohn Forte return (status); 2140fcf3ce44SJohn Forte } 2141fcf3ce44SJohn Forte 2142fcf3ce44SJohn Forte 2143fcf3ce44SJohn Forte /* 2144fcf3ce44SJohn Forte * Gets the maximum receive data segment length properties 2145fcf3ce44SJohn Forte * of the specified logical HBA. 2146fcf3ce44SJohn Forte * 2147fcf3ce44SJohn Forte * @param lhbaId The object ID of the logical HBA to 2148fcf3ce44SJohn Forte * get the max receive data 2149fcf3ce44SJohn Forte * segment length properties of. 2150fcf3ce44SJohn Forte * @param pProps A pointer to an @ref IMA_MIN_MAX_VALUE 2151fcf3ce44SJohn Forte * structure allocated by the caller. 2152fcf3ce44SJohn Forte * On successful return this structure will contain the max 2153fcf3ce44SJohn Forte * receive data segment length properties of this LHBA. 2154fcf3ce44SJohn Forte * @return An IMA_STATUS indicating if the operation 2155fcf3ce44SJohn Forte * was successful or if an error occurred. 2156fcf3ce44SJohn Forte * @retval IMA_SUCCESS Returned if the max receive 2157fcf3ce44SJohn Forte * data segment length properties 2158fcf3ce44SJohn Forte * have been successfully retrieved. 2159fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_PARAMETER Returned if 2160fcf3ce44SJohn Forte * @a pProps is NULL or specifies a 2161fcf3ce44SJohn Forte * memory area to which data cannot be written. 2162fcf3ce44SJohn Forte * @retval IMA_ERROR_INVALID_OBJECT_TYPE Returned if 2163fcf3ce44SJohn Forte * @a lhbaId does not specify any 2164fcf3ce44SJohn Forte * valid object type. 2165fcf3ce44SJohn Forte * @retval IMA_ERROR_INCORRECT_OBJECT_TYPE Returned if 2166fcf3ce44SJohn Forte * a lhbaId does not specify a LHBA. 2167fcf3ce44SJohn Forte * @retval IMA_ERROR_OBJECT_NOT_FOUND Returned if @a 2168fcf3ce44SJohn Forte * lhbaId does not specify a LHBA 2169fcf3ce44SJohn Forte * which is currently known to the system. 2170fcf3ce44SJohn Forte */ 2171fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetMaxRecvDataSegmentLengthProperties( 2172fcf3ce44SJohn Forte IMA_OID Oid, 2173fcf3ce44SJohn Forte IMA_MIN_MAX_VALUE *pProps) { 2174fcf3ce44SJohn Forte IMA_GetMaxRecvDataSegmentLengthPropertiesFn PassFunc; 2175fcf3ce44SJohn Forte IMA_UINT i; 2176fcf3ce44SJohn Forte IMA_STATUS status; 2177fcf3ce44SJohn Forte #define IMA_GMRDSLPFN IMA_GetMaxRecvDataSegmentLengthPropertiesFn 2178fcf3ce44SJohn Forte #define IMA_GMRDSLP "IMA_GetMaxRecvDataSegmentLengthProperties" 2179fcf3ce44SJohn Forte 2180fcf3ce44SJohn Forte if (number_of_plugins == -1) 2181fcf3ce44SJohn Forte InitLibrary(); 2182fcf3ce44SJohn Forte 2183fcf3ce44SJohn Forte if (pProps == NULL) 2184fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 2185fcf3ce44SJohn Forte 2186fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 2187fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 2188fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2189fcf3ce44SJohn Forte 2190fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2191fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2192fcf3ce44SJohn Forte 2193fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2194fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 2195fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2196fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2197fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2198fcf3ce44SJohn Forte #ifdef WIN32 2199fcf3ce44SJohn Forte PassFunc = 2200fcf3ce44SJohn Forte (IMA_GMRDSLPFN) 2201fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2202fcf3ce44SJohn Forte IMA_GMRDSLP); 2203fcf3ce44SJohn Forte #else 2204fcf3ce44SJohn Forte PassFunc = 2205fcf3ce44SJohn Forte (IMA_GMRDSLPFN) 2206fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2207fcf3ce44SJohn Forte IMA_GMRDSLP); 2208fcf3ce44SJohn Forte #endif 2209fcf3ce44SJohn Forte 2210fcf3ce44SJohn Forte if (PassFunc != NULL) { 2211fcf3ce44SJohn Forte status = PassFunc(Oid, pProps); 2212fcf3ce44SJohn Forte } 2213fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2214fcf3ce44SJohn Forte } 2215fcf3ce44SJohn Forte 2216fcf3ce44SJohn Forte break; 2217fcf3ce44SJohn Forte } 2218fcf3ce44SJohn Forte } 2219fcf3ce44SJohn Forte os_releasemutex(libMutex); 2220fcf3ce44SJohn Forte #undef IMA_GMRDSLPFN 2221fcf3ce44SJohn Forte #undef IMA_GMRDSLP 2222fcf3ce44SJohn Forte return (status); 2223fcf3ce44SJohn Forte } 2224fcf3ce44SJohn Forte 2225fcf3ce44SJohn Forte 2226fcf3ce44SJohn Forte 2227fcf3ce44SJohn Forte /* --------------------------------------------- */ 2228fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_PluginIOCtl( 2229fcf3ce44SJohn Forte IMA_OID pluginOid, 2230fcf3ce44SJohn Forte IMA_UINT command, 2231fcf3ce44SJohn Forte const void *pInputBuffer, 2232fcf3ce44SJohn Forte IMA_UINT inputBufferLength, 2233fcf3ce44SJohn Forte void *pOutputBuffer, 2234fcf3ce44SJohn Forte IMA_UINT *pOutputBufferLength) { 2235fcf3ce44SJohn Forte IMA_PluginIOCtlFn PassFunc; 2236fcf3ce44SJohn Forte IMA_UINT i; 2237fcf3ce44SJohn Forte IMA_STATUS status; 2238fcf3ce44SJohn Forte 2239fcf3ce44SJohn Forte if (number_of_plugins == -1) 2240fcf3ce44SJohn Forte InitLibrary(); 2241fcf3ce44SJohn Forte 2242fcf3ce44SJohn Forte if (pInputBuffer == NULL || inputBufferLength == 0 || 2243fcf3ce44SJohn Forte pOutputBuffer == NULL || pOutputBufferLength == NULL || 2244fcf3ce44SJohn Forte *pOutputBufferLength == 0) 2245fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 2246fcf3ce44SJohn Forte 2247fcf3ce44SJohn Forte if (pluginOid.objectType != IMA_OBJECT_TYPE_PLUGIN) 2248fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2249fcf3ce44SJohn Forte 2250fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2251fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2252fcf3ce44SJohn Forte 2253fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2254fcf3ce44SJohn Forte if (plugintable[i].ownerId == pluginOid.ownerId) { 2255fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2256fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2257fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2258fcf3ce44SJohn Forte #ifdef WIN32 2259fcf3ce44SJohn Forte PassFunc = (IMA_PluginIOCtlFn) 2260fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2261fcf3ce44SJohn Forte "IMA_PluginIOCtl"); 2262fcf3ce44SJohn Forte #else 2263fcf3ce44SJohn Forte PassFunc = (IMA_PluginIOCtlFn) 2264fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2265fcf3ce44SJohn Forte "IMA_PluginIOCtl"); 2266fcf3ce44SJohn Forte #endif 2267fcf3ce44SJohn Forte 2268fcf3ce44SJohn Forte if (PassFunc != NULL) { 2269fcf3ce44SJohn Forte status = PassFunc( 2270fcf3ce44SJohn Forte pluginOid, command, 2271fcf3ce44SJohn Forte pInputBuffer, inputBufferLength, 2272fcf3ce44SJohn Forte pOutputBuffer, pOutputBufferLength); 2273fcf3ce44SJohn Forte } 2274fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2275fcf3ce44SJohn Forte } 2276fcf3ce44SJohn Forte 2277fcf3ce44SJohn Forte break; 2278fcf3ce44SJohn Forte } 2279fcf3ce44SJohn Forte } 2280fcf3ce44SJohn Forte os_releasemutex(libMutex); 2281fcf3ce44SJohn Forte return (status); 2282fcf3ce44SJohn Forte } 2283fcf3ce44SJohn Forte 2284fcf3ce44SJohn Forte 2285fcf3ce44SJohn Forte 2286fcf3ce44SJohn Forte 2287fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetNetworkPortalOidList( 2288fcf3ce44SJohn Forte IMA_OID lnpId, 2289fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 2290fcf3ce44SJohn Forte IMA_GetNetworkPortalOidListFn PassFunc; 2291fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 2292fcf3ce44SJohn Forte IMA_UINT i; 2293fcf3ce44SJohn Forte IMA_STATUS status; 2294fcf3ce44SJohn Forte 2295fcf3ce44SJohn Forte if (number_of_plugins == -1) 2296fcf3ce44SJohn Forte InitLibrary(); 2297fcf3ce44SJohn Forte 2298fcf3ce44SJohn Forte if (ppList == NULL) 2299fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 2300fcf3ce44SJohn Forte 2301fcf3ce44SJohn Forte if (lnpId.objectType != IMA_OBJECT_TYPE_LNP) 2302fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2303fcf3ce44SJohn Forte 2304fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2305fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2306fcf3ce44SJohn Forte 2307fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2308fcf3ce44SJohn Forte if (plugintable[i].ownerId == lnpId.ownerId) { 2309fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2310fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2311fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2312fcf3ce44SJohn Forte #ifdef WIN32 2313fcf3ce44SJohn Forte PassFunc = (IMA_GetNetworkPortalOidListFn) 2314fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2315fcf3ce44SJohn Forte "IMA_GetNetworkPortalOidList"); 2316fcf3ce44SJohn Forte #else 2317fcf3ce44SJohn Forte PassFunc = (IMA_GetNetworkPortalOidListFn) 2318fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2319fcf3ce44SJohn Forte "IMA_GetNetworkPortalOidList"); 2320fcf3ce44SJohn Forte #endif 2321fcf3ce44SJohn Forte 2322fcf3ce44SJohn Forte if (PassFunc != NULL) { 2323fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 2324fcf3ce44SJohn Forte IMA_UINT listSize; 2325fcf3ce44SJohn Forte listSize = sizeof (IMA_OID_LIST); 2326fcf3ce44SJohn Forte status = PassFunc(lnpId, &ppOidList); 2327fcf3ce44SJohn Forte if (IMA_SUCCESS(status)) { 2328fcf3ce44SJohn Forte 2329fcf3ce44SJohn Forte *ppList = (IMA_OID_LIST*) 2330fcf3ce44SJohn Forte calloc(1, 2331fcf3ce44SJohn Forte sizeof (IMA_OID_LIST) 2332fcf3ce44SJohn Forte + (ppOidList-> 2333fcf3ce44SJohn Forte oidCount - 1)* 2334fcf3ce44SJohn Forte sizeof (IMA_OID)); 2335fcf3ce44SJohn Forte 2336fcf3ce44SJohn Forte if ((*ppList) == NULL) { 2337fcf3ce44SJohn Forte return (EUOS_ERROR); 2338fcf3ce44SJohn Forte } 2339fcf3ce44SJohn Forte else 2340fcf3ce44SJohn Forte memcpy((*ppList), 2341fcf3ce44SJohn Forte ppOidList, 2342fcf3ce44SJohn Forte listSize 2343fcf3ce44SJohn Forte + (ppOidList-> 2344fcf3ce44SJohn Forte oidCount - 1)* 2345fcf3ce44SJohn Forte sizeof (IMA_OID)); 2346fcf3ce44SJohn Forte #ifdef WIN32 2347fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 2348fcf3ce44SJohn Forte GetProcAddress( 2349fcf3ce44SJohn Forte plugintable[i].hPlugin, 2350fcf3ce44SJohn Forte "IMA_FreeMemory"); 2351fcf3ce44SJohn Forte #else 2352fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 2353fcf3ce44SJohn Forte dlsym( 2354fcf3ce44SJohn Forte plugintable[i].hPlugin, 2355fcf3ce44SJohn Forte "IMA_FreeMemory"); 2356fcf3ce44SJohn Forte #endif 2357fcf3ce44SJohn Forte if (FreeFunc != NULL) { 2358fcf3ce44SJohn Forte FreeFunc(ppOidList); 2359fcf3ce44SJohn Forte } 2360fcf3ce44SJohn Forte } 2361fcf3ce44SJohn Forte } 2362fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2363fcf3ce44SJohn Forte } 2364fcf3ce44SJohn Forte 2365fcf3ce44SJohn Forte break; 2366fcf3ce44SJohn Forte } 2367fcf3ce44SJohn Forte } 2368fcf3ce44SJohn Forte os_releasemutex(libMutex); 2369fcf3ce44SJohn Forte return (status); 2370fcf3ce44SJohn Forte } 2371fcf3ce44SJohn Forte 2372fcf3ce44SJohn Forte 2373fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetFirstBurstLength( 2374fcf3ce44SJohn Forte IMA_OID lhbaId, 2375fcf3ce44SJohn Forte IMA_UINT firstBurstLength) { 2376fcf3ce44SJohn Forte IMA_SetFirstBurstLengthFn PassFunc; 2377fcf3ce44SJohn Forte IMA_UINT i; 2378fcf3ce44SJohn Forte IMA_STATUS status; 2379fcf3ce44SJohn Forte 2380fcf3ce44SJohn Forte if (number_of_plugins == -1) 2381fcf3ce44SJohn Forte InitLibrary(); 2382fcf3ce44SJohn Forte 2383fcf3ce44SJohn Forte if (lhbaId.objectType != IMA_OBJECT_TYPE_LHBA && 2384fcf3ce44SJohn Forte lhbaId.objectType != IMA_OBJECT_TYPE_TARGET) 2385fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2386fcf3ce44SJohn Forte 2387fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2388fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2389fcf3ce44SJohn Forte 2390fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2391fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaId.ownerId) { 2392fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2393fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2394fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2395fcf3ce44SJohn Forte #ifdef WIN32 2396fcf3ce44SJohn Forte PassFunc = (IMA_SetFirstBurstLengthFn) 2397fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2398fcf3ce44SJohn Forte "IMA_SetFirstBurstLength"); 2399fcf3ce44SJohn Forte #else 2400fcf3ce44SJohn Forte PassFunc = (IMA_SetFirstBurstLengthFn) 2401fcf3ce44SJohn Forte dlsym( 2402fcf3ce44SJohn Forte plugintable[i].hPlugin, 2403fcf3ce44SJohn Forte "IMA_SetFirstBurstLength"); 2404fcf3ce44SJohn Forte #endif 2405fcf3ce44SJohn Forte 2406fcf3ce44SJohn Forte if (PassFunc != NULL) { 2407fcf3ce44SJohn Forte status = PassFunc( 2408fcf3ce44SJohn Forte lhbaId, firstBurstLength); 2409fcf3ce44SJohn Forte } 2410fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2411fcf3ce44SJohn Forte } 2412fcf3ce44SJohn Forte 2413fcf3ce44SJohn Forte break; 2414fcf3ce44SJohn Forte } 2415fcf3ce44SJohn Forte } 2416fcf3ce44SJohn Forte os_releasemutex(libMutex); 2417fcf3ce44SJohn Forte return (status); 2418fcf3ce44SJohn Forte } 2419fcf3ce44SJohn Forte 2420fcf3ce44SJohn Forte 2421fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetMaxBurstLength( 2422fcf3ce44SJohn Forte IMA_OID lhbaId, 2423fcf3ce44SJohn Forte IMA_UINT maxBurstLength) { 2424fcf3ce44SJohn Forte IMA_SetMaxBurstLengthFn PassFunc; 2425fcf3ce44SJohn Forte IMA_UINT i; 2426fcf3ce44SJohn Forte IMA_STATUS status; 2427fcf3ce44SJohn Forte 2428fcf3ce44SJohn Forte if (number_of_plugins == -1) 2429fcf3ce44SJohn Forte InitLibrary(); 2430fcf3ce44SJohn Forte 2431fcf3ce44SJohn Forte if (lhbaId.objectType != IMA_OBJECT_TYPE_LHBA && 2432fcf3ce44SJohn Forte lhbaId.objectType != IMA_OBJECT_TYPE_TARGET) 2433fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2434fcf3ce44SJohn Forte 2435fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2436fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2437fcf3ce44SJohn Forte 2438fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2439fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaId.ownerId) { 2440fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2441fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2442fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2443fcf3ce44SJohn Forte #ifdef WIN32 2444fcf3ce44SJohn Forte PassFunc = (IMA_SetMaxBurstLengthFn) 2445fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2446fcf3ce44SJohn Forte "IMA_SetMaxBurstLength"); 2447fcf3ce44SJohn Forte #else 2448fcf3ce44SJohn Forte PassFunc = (IMA_SetMaxBurstLengthFn) 2449fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2450fcf3ce44SJohn Forte "IMA_SetMaxBurstLength"); 2451fcf3ce44SJohn Forte #endif 2452fcf3ce44SJohn Forte 2453fcf3ce44SJohn Forte if (PassFunc != NULL) { 2454fcf3ce44SJohn Forte status = PassFunc( 2455fcf3ce44SJohn Forte lhbaId, maxBurstLength); 2456fcf3ce44SJohn Forte } 2457fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2458fcf3ce44SJohn Forte } 2459fcf3ce44SJohn Forte 2460fcf3ce44SJohn Forte break; 2461fcf3ce44SJohn Forte } 2462fcf3ce44SJohn Forte } 2463fcf3ce44SJohn Forte os_releasemutex(libMutex); 2464fcf3ce44SJohn Forte return (status); 2465fcf3ce44SJohn Forte } 2466fcf3ce44SJohn Forte 2467fcf3ce44SJohn Forte 2468fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetMaxRecvDataSegmentLength( 2469fcf3ce44SJohn Forte IMA_OID lhbaId, 2470fcf3ce44SJohn Forte IMA_UINT maxRecvDataSegmentLength) { 2471fcf3ce44SJohn Forte IMA_SetMaxRecvDataSegmentLengthFn PassFunc; 2472fcf3ce44SJohn Forte IMA_UINT i; 2473fcf3ce44SJohn Forte IMA_STATUS status; 2474fcf3ce44SJohn Forte 2475fcf3ce44SJohn Forte if (number_of_plugins == -1) 2476fcf3ce44SJohn Forte InitLibrary(); 2477fcf3ce44SJohn Forte 2478fcf3ce44SJohn Forte if (lhbaId.objectType != IMA_OBJECT_TYPE_LHBA && 2479fcf3ce44SJohn Forte lhbaId.objectType != IMA_OBJECT_TYPE_TARGET) 2480fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2481fcf3ce44SJohn Forte 2482fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2483fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2484fcf3ce44SJohn Forte 2485fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2486fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaId.ownerId) { 2487fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2488fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2489fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2490fcf3ce44SJohn Forte #ifdef WIN32 2491fcf3ce44SJohn Forte PassFunc = 2492fcf3ce44SJohn Forte (IMA_SetMaxRecvDataSegmentLengthFn) 2493fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2494fcf3ce44SJohn Forte "IMA_SetMaxRecvDataSegmentLength"); 2495fcf3ce44SJohn Forte #else 2496fcf3ce44SJohn Forte PassFunc = 2497fcf3ce44SJohn Forte (IMA_SetMaxRecvDataSegmentLengthFn) 2498fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2499fcf3ce44SJohn Forte "IMA_SetMaxRecvDataSegmentLength"); 2500fcf3ce44SJohn Forte #endif 2501fcf3ce44SJohn Forte 2502fcf3ce44SJohn Forte if (PassFunc != NULL) { 2503fcf3ce44SJohn Forte status = PassFunc( 2504fcf3ce44SJohn Forte lhbaId, 2505fcf3ce44SJohn Forte maxRecvDataSegmentLength); 2506fcf3ce44SJohn Forte } 2507fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2508fcf3ce44SJohn Forte } 2509fcf3ce44SJohn Forte 2510fcf3ce44SJohn Forte break; 2511fcf3ce44SJohn Forte } 2512fcf3ce44SJohn Forte } 2513fcf3ce44SJohn Forte os_releasemutex(libMutex); 2514fcf3ce44SJohn Forte return (status); 2515fcf3ce44SJohn Forte } 2516fcf3ce44SJohn Forte 2517fcf3ce44SJohn Forte 2518fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetMaxConnectionsProperties( 2519fcf3ce44SJohn Forte IMA_OID Oid, 2520fcf3ce44SJohn Forte IMA_MIN_MAX_VALUE *pProps) { 2521fcf3ce44SJohn Forte IMA_GetMaxConnectionsPropertiesFn PassFunc; 2522fcf3ce44SJohn Forte IMA_UINT i; 2523fcf3ce44SJohn Forte IMA_STATUS status; 2524fcf3ce44SJohn Forte 2525fcf3ce44SJohn Forte if (number_of_plugins == -1) 2526fcf3ce44SJohn Forte InitLibrary(); 2527fcf3ce44SJohn Forte 2528fcf3ce44SJohn Forte if (pProps == NULL) 2529fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 2530fcf3ce44SJohn Forte 2531fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 2532fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 2533fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2534fcf3ce44SJohn Forte 2535fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2536fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2537fcf3ce44SJohn Forte 2538fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2539fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 2540fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2541fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2542fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2543fcf3ce44SJohn Forte #ifdef WIN32 2544fcf3ce44SJohn Forte PassFunc = 2545fcf3ce44SJohn Forte (IMA_GetMaxConnectionsPropertiesFn) 2546fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2547fcf3ce44SJohn Forte "IMA_GetMaxConnectionsProperties"); 2548fcf3ce44SJohn Forte #else 2549fcf3ce44SJohn Forte PassFunc = 2550fcf3ce44SJohn Forte (IMA_GetMaxConnectionsPropertiesFn) 2551fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2552fcf3ce44SJohn Forte "IMA_GetMaxConnectionsProperties"); 2553fcf3ce44SJohn Forte #endif 2554fcf3ce44SJohn Forte 2555fcf3ce44SJohn Forte if (PassFunc != NULL) { 2556fcf3ce44SJohn Forte status = PassFunc(Oid, pProps); 2557fcf3ce44SJohn Forte } 2558fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2559fcf3ce44SJohn Forte } 2560fcf3ce44SJohn Forte 2561fcf3ce44SJohn Forte break; 2562fcf3ce44SJohn Forte } 2563fcf3ce44SJohn Forte } 2564fcf3ce44SJohn Forte os_releasemutex(libMutex); 2565fcf3ce44SJohn Forte return (status); 2566fcf3ce44SJohn Forte } 2567fcf3ce44SJohn Forte 2568fcf3ce44SJohn Forte 2569fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetMaxConnections( 2570fcf3ce44SJohn Forte IMA_OID lhbaId, 2571fcf3ce44SJohn Forte IMA_UINT maxConnections) { 2572fcf3ce44SJohn Forte IMA_SetMaxConnectionsFn PassFunc; 2573fcf3ce44SJohn Forte IMA_UINT i; 2574fcf3ce44SJohn Forte IMA_STATUS status; 2575fcf3ce44SJohn Forte 2576fcf3ce44SJohn Forte if (number_of_plugins == -1) 2577fcf3ce44SJohn Forte InitLibrary(); 2578fcf3ce44SJohn Forte 2579fcf3ce44SJohn Forte if (lhbaId.objectType != IMA_OBJECT_TYPE_LHBA && 2580fcf3ce44SJohn Forte lhbaId.objectType != IMA_OBJECT_TYPE_TARGET) 2581fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2582fcf3ce44SJohn Forte 2583fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2584fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2585fcf3ce44SJohn Forte 2586fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2587fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaId.ownerId) { 2588fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2589fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2590fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2591fcf3ce44SJohn Forte #ifdef WIN32 2592fcf3ce44SJohn Forte PassFunc = (IMA_SetMaxConnectionsFn) 2593fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2594fcf3ce44SJohn Forte "IMA_SetMaxConnections"); 2595fcf3ce44SJohn Forte #else 2596fcf3ce44SJohn Forte PassFunc = (IMA_SetMaxConnectionsFn) 2597fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2598fcf3ce44SJohn Forte "IMA_SetMaxConnections"); 2599fcf3ce44SJohn Forte #endif 2600fcf3ce44SJohn Forte 2601fcf3ce44SJohn Forte if (PassFunc != NULL) { 2602fcf3ce44SJohn Forte status = PassFunc( 2603fcf3ce44SJohn Forte lhbaId, maxConnections); 2604fcf3ce44SJohn Forte } 2605fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2606fcf3ce44SJohn Forte } 2607fcf3ce44SJohn Forte 2608fcf3ce44SJohn Forte break; 2609fcf3ce44SJohn Forte } 2610fcf3ce44SJohn Forte } 2611fcf3ce44SJohn Forte os_releasemutex(libMutex); 2612fcf3ce44SJohn Forte return (status); 2613fcf3ce44SJohn Forte } 2614fcf3ce44SJohn Forte 2615fcf3ce44SJohn Forte 2616fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetDefaultTime2RetainProperties( 2617fcf3ce44SJohn Forte IMA_OID lhbaId, 2618fcf3ce44SJohn Forte IMA_MIN_MAX_VALUE *pProps) { 2619fcf3ce44SJohn Forte IMA_GetDefaultTime2RetainPropertiesFn PassFunc; 2620fcf3ce44SJohn Forte IMA_UINT i; 2621fcf3ce44SJohn Forte IMA_STATUS status; 2622fcf3ce44SJohn Forte 2623fcf3ce44SJohn Forte if (number_of_plugins == -1) 2624fcf3ce44SJohn Forte InitLibrary(); 2625fcf3ce44SJohn Forte 2626fcf3ce44SJohn Forte if (pProps == NULL) 2627fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 2628fcf3ce44SJohn Forte 2629fcf3ce44SJohn Forte if (lhbaId.objectType != IMA_OBJECT_TYPE_LHBA && 2630fcf3ce44SJohn Forte lhbaId.objectType != IMA_OBJECT_TYPE_TARGET) 2631fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2632fcf3ce44SJohn Forte 2633fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2634fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2635fcf3ce44SJohn Forte 2636fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2637fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaId.ownerId) { 2638fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2639fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2640fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2641fcf3ce44SJohn Forte #ifdef WIN32 2642fcf3ce44SJohn Forte PassFunc = 2643fcf3ce44SJohn Forte (IMA_GetDefaultTime2RetainPropertiesFn) 2644fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2645fcf3ce44SJohn Forte "IMA_GetDefaultTime2RetainProperties"); 2646fcf3ce44SJohn Forte #else 2647fcf3ce44SJohn Forte PassFunc = 2648fcf3ce44SJohn Forte (IMA_GetDefaultTime2RetainPropertiesFn) 2649fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2650fcf3ce44SJohn Forte "IMA_GetDefaultTime2RetainProperties"); 2651fcf3ce44SJohn Forte #endif 2652fcf3ce44SJohn Forte 2653fcf3ce44SJohn Forte if (PassFunc != NULL) { 2654fcf3ce44SJohn Forte status = PassFunc(lhbaId, pProps); 2655fcf3ce44SJohn Forte } 2656fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2657fcf3ce44SJohn Forte } 2658fcf3ce44SJohn Forte 2659fcf3ce44SJohn Forte break; 2660fcf3ce44SJohn Forte } 2661fcf3ce44SJohn Forte } 2662fcf3ce44SJohn Forte os_releasemutex(libMutex); 2663fcf3ce44SJohn Forte return (status); 2664fcf3ce44SJohn Forte } 2665fcf3ce44SJohn Forte 2666fcf3ce44SJohn Forte 2667fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetDefaultTime2Retain( 2668fcf3ce44SJohn Forte IMA_OID lhbaId, 2669fcf3ce44SJohn Forte IMA_UINT defaultTime2Retain) { 2670fcf3ce44SJohn Forte IMA_SetDefaultTime2RetainFn PassFunc; 2671fcf3ce44SJohn Forte IMA_UINT i; 2672fcf3ce44SJohn Forte IMA_STATUS status; 2673fcf3ce44SJohn Forte 2674fcf3ce44SJohn Forte if (number_of_plugins == -1) 2675fcf3ce44SJohn Forte InitLibrary(); 2676fcf3ce44SJohn Forte 2677fcf3ce44SJohn Forte if (lhbaId.objectType != IMA_OBJECT_TYPE_LHBA && 2678fcf3ce44SJohn Forte lhbaId.objectType != IMA_OBJECT_TYPE_TARGET) 2679fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2680fcf3ce44SJohn Forte 2681fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2682fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2683fcf3ce44SJohn Forte 2684fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2685fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaId.ownerId) { 2686fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2687fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2688fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2689fcf3ce44SJohn Forte #ifdef WIN32 2690fcf3ce44SJohn Forte PassFunc = 2691fcf3ce44SJohn Forte (IMA_SetDefaultTime2RetainFn) 2692fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2693fcf3ce44SJohn Forte "IMA_SetDefaultTime2Retain"); 2694fcf3ce44SJohn Forte #else 2695fcf3ce44SJohn Forte PassFunc = 2696fcf3ce44SJohn Forte (IMA_SetDefaultTime2RetainFn) 2697fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2698fcf3ce44SJohn Forte "IMA_SetDefaultTime2Retain"); 2699fcf3ce44SJohn Forte #endif 2700fcf3ce44SJohn Forte 2701fcf3ce44SJohn Forte if (PassFunc != NULL) { 2702fcf3ce44SJohn Forte status = PassFunc( 2703fcf3ce44SJohn Forte lhbaId, defaultTime2Retain); 2704fcf3ce44SJohn Forte } 2705fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2706fcf3ce44SJohn Forte } 2707fcf3ce44SJohn Forte 2708fcf3ce44SJohn Forte break; 2709fcf3ce44SJohn Forte } 2710fcf3ce44SJohn Forte } 2711fcf3ce44SJohn Forte os_releasemutex(libMutex); 2712fcf3ce44SJohn Forte return (status); 2713fcf3ce44SJohn Forte } 2714fcf3ce44SJohn Forte 2715fcf3ce44SJohn Forte 2716fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetDefaultTime2WaitProperties( 2717fcf3ce44SJohn Forte IMA_OID lhbaId, 2718fcf3ce44SJohn Forte IMA_MIN_MAX_VALUE *pProps) { 2719fcf3ce44SJohn Forte IMA_GetDefaultTime2WaitPropertiesFn PassFunc; 2720fcf3ce44SJohn Forte IMA_UINT i; 2721fcf3ce44SJohn Forte IMA_STATUS status; 2722fcf3ce44SJohn Forte 2723fcf3ce44SJohn Forte if (number_of_plugins == -1) 2724fcf3ce44SJohn Forte InitLibrary(); 2725fcf3ce44SJohn Forte 2726fcf3ce44SJohn Forte if (pProps == NULL) 2727fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 2728fcf3ce44SJohn Forte 2729fcf3ce44SJohn Forte if (lhbaId.objectType != IMA_OBJECT_TYPE_LHBA && 2730fcf3ce44SJohn Forte lhbaId.objectType != IMA_OBJECT_TYPE_TARGET) 2731fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2732fcf3ce44SJohn Forte 2733fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2734fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2735fcf3ce44SJohn Forte 2736fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2737fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaId.ownerId) { 2738fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2739fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2740fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2741fcf3ce44SJohn Forte #ifdef WIN32 2742fcf3ce44SJohn Forte PassFunc = 2743fcf3ce44SJohn Forte (IMA_GetDefaultTime2WaitPropertiesFn) 2744fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2745fcf3ce44SJohn Forte "IMA_GetDefaultTime2WaitProperties"); 2746fcf3ce44SJohn Forte #else 2747fcf3ce44SJohn Forte PassFunc = 2748fcf3ce44SJohn Forte (IMA_GetDefaultTime2WaitPropertiesFn) 2749fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2750fcf3ce44SJohn Forte "IMA_GetDefaultTime2WaitProperties"); 2751fcf3ce44SJohn Forte #endif 2752fcf3ce44SJohn Forte 2753fcf3ce44SJohn Forte if (PassFunc != NULL) { 2754fcf3ce44SJohn Forte status = PassFunc(lhbaId, pProps); 2755fcf3ce44SJohn Forte } 2756fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2757fcf3ce44SJohn Forte } 2758fcf3ce44SJohn Forte 2759fcf3ce44SJohn Forte break; 2760fcf3ce44SJohn Forte } 2761fcf3ce44SJohn Forte } 2762fcf3ce44SJohn Forte os_releasemutex(libMutex); 2763fcf3ce44SJohn Forte return (status); 2764fcf3ce44SJohn Forte } 2765fcf3ce44SJohn Forte 2766fcf3ce44SJohn Forte 2767fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetDefaultTime2Wait( 2768fcf3ce44SJohn Forte IMA_OID lhbaId, 2769fcf3ce44SJohn Forte IMA_UINT defaultTime2Wait) { 2770fcf3ce44SJohn Forte IMA_SetDefaultTime2WaitFn PassFunc; 2771fcf3ce44SJohn Forte IMA_UINT i; 2772fcf3ce44SJohn Forte IMA_STATUS status; 2773fcf3ce44SJohn Forte 2774fcf3ce44SJohn Forte if (number_of_plugins == -1) 2775fcf3ce44SJohn Forte InitLibrary(); 2776fcf3ce44SJohn Forte 2777fcf3ce44SJohn Forte if (lhbaId.objectType != IMA_OBJECT_TYPE_LHBA && 2778fcf3ce44SJohn Forte lhbaId.objectType != IMA_OBJECT_TYPE_TARGET) 2779fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2780fcf3ce44SJohn Forte 2781fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2782fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2783fcf3ce44SJohn Forte 2784fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2785fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaId.ownerId) { 2786fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2787fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2788fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2789fcf3ce44SJohn Forte #ifdef WIN32 2790fcf3ce44SJohn Forte PassFunc = 2791fcf3ce44SJohn Forte (IMA_SetDefaultTime2WaitFn) 2792fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2793fcf3ce44SJohn Forte "IMA_SetDefaultTime2Wait"); 2794fcf3ce44SJohn Forte #else 2795fcf3ce44SJohn Forte PassFunc = 2796fcf3ce44SJohn Forte (IMA_SetDefaultTime2WaitFn) 2797fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2798fcf3ce44SJohn Forte "IMA_SetDefaultTime2Wait"); 2799fcf3ce44SJohn Forte #endif 2800fcf3ce44SJohn Forte 2801fcf3ce44SJohn Forte if (PassFunc != NULL) { 2802fcf3ce44SJohn Forte status = PassFunc( 2803fcf3ce44SJohn Forte lhbaId, defaultTime2Wait); 2804fcf3ce44SJohn Forte } 2805fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2806fcf3ce44SJohn Forte } 2807fcf3ce44SJohn Forte 2808fcf3ce44SJohn Forte break; 2809fcf3ce44SJohn Forte } 2810fcf3ce44SJohn Forte } 2811fcf3ce44SJohn Forte os_releasemutex(libMutex); 2812fcf3ce44SJohn Forte return (status); 2813fcf3ce44SJohn Forte } 2814fcf3ce44SJohn Forte 2815fcf3ce44SJohn Forte 2816fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetMaxOutstandingR2TProperties( 2817fcf3ce44SJohn Forte IMA_OID Oid, 2818fcf3ce44SJohn Forte IMA_MIN_MAX_VALUE *pProps) { 2819fcf3ce44SJohn Forte IMA_GetMaxOutstandingR2TPropertiesFn PassFunc; 2820fcf3ce44SJohn Forte IMA_UINT i; 2821fcf3ce44SJohn Forte IMA_STATUS status; 2822fcf3ce44SJohn Forte 2823fcf3ce44SJohn Forte if (number_of_plugins == -1) 2824fcf3ce44SJohn Forte InitLibrary(); 2825fcf3ce44SJohn Forte 2826fcf3ce44SJohn Forte if (pProps == NULL) 2827fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 2828fcf3ce44SJohn Forte 2829fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 2830fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 2831fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2832fcf3ce44SJohn Forte 2833fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2834fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2835fcf3ce44SJohn Forte 2836fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2837fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 2838fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2839fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2840fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2841fcf3ce44SJohn Forte #ifdef WIN32 2842fcf3ce44SJohn Forte PassFunc = 2843fcf3ce44SJohn Forte (IMA_GetMaxOutstandingR2TPropertiesFn) 2844fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2845fcf3ce44SJohn Forte "IMA_GetMaxOutstandingR2TProperties"); 2846fcf3ce44SJohn Forte #else 2847fcf3ce44SJohn Forte PassFunc = 2848fcf3ce44SJohn Forte (IMA_GetMaxOutstandingR2TPropertiesFn) 2849fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2850fcf3ce44SJohn Forte "IMA_GetMaxOutstandingR2TProperties"); 2851fcf3ce44SJohn Forte #endif 2852fcf3ce44SJohn Forte 2853fcf3ce44SJohn Forte if (PassFunc != NULL) { 2854fcf3ce44SJohn Forte status = PassFunc(Oid, pProps); 2855fcf3ce44SJohn Forte } 2856fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2857fcf3ce44SJohn Forte } 2858fcf3ce44SJohn Forte 2859fcf3ce44SJohn Forte break; 2860fcf3ce44SJohn Forte } 2861fcf3ce44SJohn Forte } 2862fcf3ce44SJohn Forte os_releasemutex(libMutex); 2863fcf3ce44SJohn Forte return (status); 2864fcf3ce44SJohn Forte } 2865fcf3ce44SJohn Forte 2866fcf3ce44SJohn Forte 2867fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetMaxOutstandingR2T( 2868fcf3ce44SJohn Forte IMA_OID lhbaId, 2869fcf3ce44SJohn Forte IMA_UINT maxOutstandingR2T) { 2870fcf3ce44SJohn Forte IMA_SetMaxOutstandingR2TFn PassFunc; 2871fcf3ce44SJohn Forte IMA_UINT i; 2872fcf3ce44SJohn Forte IMA_STATUS status; 2873fcf3ce44SJohn Forte 2874fcf3ce44SJohn Forte if (number_of_plugins == -1) 2875fcf3ce44SJohn Forte InitLibrary(); 2876fcf3ce44SJohn Forte 2877fcf3ce44SJohn Forte if (lhbaId.objectType != IMA_OBJECT_TYPE_LHBA && 2878fcf3ce44SJohn Forte lhbaId.objectType != IMA_OBJECT_TYPE_TARGET) 2879fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2880fcf3ce44SJohn Forte 2881fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2882fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2883fcf3ce44SJohn Forte 2884fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2885fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaId.ownerId) { 2886fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2887fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2888fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2889fcf3ce44SJohn Forte #ifdef WIN32 2890fcf3ce44SJohn Forte PassFunc = 2891fcf3ce44SJohn Forte (IMA_SetMaxOutstandingR2TFn) 2892fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2893fcf3ce44SJohn Forte "IMA_SetMaxOutstandingR2T"); 2894fcf3ce44SJohn Forte #else 2895fcf3ce44SJohn Forte PassFunc = 2896fcf3ce44SJohn Forte (IMA_SetMaxOutstandingR2TFn) 2897fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2898fcf3ce44SJohn Forte "IMA_SetMaxOutstandingR2T"); 2899fcf3ce44SJohn Forte #endif 2900fcf3ce44SJohn Forte 2901fcf3ce44SJohn Forte if (PassFunc != NULL) { 2902fcf3ce44SJohn Forte status = PassFunc( 2903fcf3ce44SJohn Forte lhbaId, maxOutstandingR2T); 2904fcf3ce44SJohn Forte } 2905fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2906fcf3ce44SJohn Forte } 2907fcf3ce44SJohn Forte 2908fcf3ce44SJohn Forte break; 2909fcf3ce44SJohn Forte } 2910fcf3ce44SJohn Forte } 2911fcf3ce44SJohn Forte os_releasemutex(libMutex); 2912fcf3ce44SJohn Forte return (status); 2913fcf3ce44SJohn Forte } 2914fcf3ce44SJohn Forte 2915fcf3ce44SJohn Forte 2916fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetErrorRecoveryLevelProperties( 2917fcf3ce44SJohn Forte IMA_OID Oid, 2918fcf3ce44SJohn Forte IMA_MIN_MAX_VALUE *pProps) { 2919fcf3ce44SJohn Forte IMA_GetMaxOutstandingR2TPropertiesFn PassFunc; 2920fcf3ce44SJohn Forte IMA_UINT i; 2921fcf3ce44SJohn Forte IMA_STATUS status; 2922fcf3ce44SJohn Forte 2923fcf3ce44SJohn Forte if (number_of_plugins == -1) 2924fcf3ce44SJohn Forte InitLibrary(); 2925fcf3ce44SJohn Forte 2926fcf3ce44SJohn Forte if (pProps == NULL) 2927fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 2928fcf3ce44SJohn Forte 2929fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 2930fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 2931fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2932fcf3ce44SJohn Forte 2933fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2934fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2935fcf3ce44SJohn Forte 2936fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2937fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 2938fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2939fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2940fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2941fcf3ce44SJohn Forte #ifdef WIN32 2942fcf3ce44SJohn Forte PassFunc = 2943fcf3ce44SJohn Forte (IMA_GetErrorRecoveryLevelPropertiesFn) 2944fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2945fcf3ce44SJohn Forte "IMA_GetErrorRecoveryLevelProperties"); 2946fcf3ce44SJohn Forte #else 2947fcf3ce44SJohn Forte PassFunc = 2948fcf3ce44SJohn Forte (IMA_GetErrorRecoveryLevelPropertiesFn) 2949fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2950fcf3ce44SJohn Forte "IMA_GetErrorRecoveryLevelProperties"); 2951fcf3ce44SJohn Forte #endif 2952fcf3ce44SJohn Forte 2953fcf3ce44SJohn Forte if (PassFunc != NULL) { 2954fcf3ce44SJohn Forte status = PassFunc(Oid, pProps); 2955fcf3ce44SJohn Forte } 2956fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 2957fcf3ce44SJohn Forte } 2958fcf3ce44SJohn Forte 2959fcf3ce44SJohn Forte break; 2960fcf3ce44SJohn Forte } 2961fcf3ce44SJohn Forte } 2962fcf3ce44SJohn Forte os_releasemutex(libMutex); 2963fcf3ce44SJohn Forte return (status); 2964fcf3ce44SJohn Forte } 2965fcf3ce44SJohn Forte 2966fcf3ce44SJohn Forte 2967fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetErrorRecoveryLevel( 2968fcf3ce44SJohn Forte IMA_OID Oid, 2969fcf3ce44SJohn Forte IMA_UINT errorRecoveryLevel) { 2970fcf3ce44SJohn Forte IMA_SetErrorRecoveryLevelFn PassFunc; 2971fcf3ce44SJohn Forte IMA_UINT i; 2972fcf3ce44SJohn Forte IMA_STATUS status; 2973fcf3ce44SJohn Forte 2974fcf3ce44SJohn Forte if (number_of_plugins == -1) 2975fcf3ce44SJohn Forte InitLibrary(); 2976fcf3ce44SJohn Forte 2977fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 2978fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 2979fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 2980fcf3ce44SJohn Forte 2981fcf3ce44SJohn Forte os_obtainmutex(libMutex); 2982fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 2983fcf3ce44SJohn Forte 2984fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 2985fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 2986fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 2987fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 2988fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 2989fcf3ce44SJohn Forte #ifdef WIN32 2990fcf3ce44SJohn Forte PassFunc = 2991fcf3ce44SJohn Forte (IMA_SetErrorRecoveryLevelFn) 2992fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 2993fcf3ce44SJohn Forte "IMA_SetErrorRecoveryLevel"); 2994fcf3ce44SJohn Forte #else 2995fcf3ce44SJohn Forte PassFunc = 2996fcf3ce44SJohn Forte (IMA_SetErrorRecoveryLevelFn) 2997fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 2998fcf3ce44SJohn Forte "IMA_SetErrorRecoveryLevel"); 2999fcf3ce44SJohn Forte #endif 3000fcf3ce44SJohn Forte 3001fcf3ce44SJohn Forte if (PassFunc != NULL) { 3002fcf3ce44SJohn Forte status = PassFunc( 3003fcf3ce44SJohn Forte Oid, errorRecoveryLevel); 3004fcf3ce44SJohn Forte } 3005fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3006fcf3ce44SJohn Forte } 3007fcf3ce44SJohn Forte 3008fcf3ce44SJohn Forte break; 3009fcf3ce44SJohn Forte } 3010fcf3ce44SJohn Forte } 3011fcf3ce44SJohn Forte os_releasemutex(libMutex); 3012fcf3ce44SJohn Forte return (status); 3013fcf3ce44SJohn Forte } 3014fcf3ce44SJohn Forte 3015fcf3ce44SJohn Forte 3016fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetInitialR2TProperties( 3017fcf3ce44SJohn Forte IMA_OID Oid, 3018fcf3ce44SJohn Forte IMA_BOOL_VALUE *pProps) { 3019fcf3ce44SJohn Forte IMA_GetInitialR2TPropertiesFn PassFunc; 3020fcf3ce44SJohn Forte IMA_UINT i; 3021fcf3ce44SJohn Forte IMA_STATUS status; 3022fcf3ce44SJohn Forte 3023fcf3ce44SJohn Forte if (number_of_plugins == -1) 3024fcf3ce44SJohn Forte InitLibrary(); 3025fcf3ce44SJohn Forte 3026fcf3ce44SJohn Forte if (pProps == NULL) 3027fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3028fcf3ce44SJohn Forte 3029fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 3030fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 3031fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3032fcf3ce44SJohn Forte 3033fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3034fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3035fcf3ce44SJohn Forte 3036fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3037fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 3038fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3039fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3040fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3041fcf3ce44SJohn Forte #ifdef WIN32 3042fcf3ce44SJohn Forte PassFunc = 3043fcf3ce44SJohn Forte (IMA_GetInitialR2TPropertiesFn) 3044fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3045fcf3ce44SJohn Forte "IMA_GetInitialR2TProperties"); 3046fcf3ce44SJohn Forte #else 3047fcf3ce44SJohn Forte PassFunc = 3048fcf3ce44SJohn Forte (IMA_GetInitialR2TPropertiesFn) 3049fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3050fcf3ce44SJohn Forte "IMA_GetInitialR2TProperties"); 3051fcf3ce44SJohn Forte #endif 3052fcf3ce44SJohn Forte 3053fcf3ce44SJohn Forte if (PassFunc != NULL) { 3054fcf3ce44SJohn Forte status = PassFunc(Oid, pProps); 3055fcf3ce44SJohn Forte } 3056fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3057fcf3ce44SJohn Forte } 3058fcf3ce44SJohn Forte 3059fcf3ce44SJohn Forte break; 3060fcf3ce44SJohn Forte } 3061fcf3ce44SJohn Forte } 3062fcf3ce44SJohn Forte os_releasemutex(libMutex); 3063fcf3ce44SJohn Forte return (status); 3064fcf3ce44SJohn Forte } 3065fcf3ce44SJohn Forte 3066fcf3ce44SJohn Forte 3067fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetInitialR2T( 3068fcf3ce44SJohn Forte IMA_OID Oid, 3069fcf3ce44SJohn Forte IMA_BOOL initialR2T) 3070fcf3ce44SJohn Forte { 3071fcf3ce44SJohn Forte IMA_SetInitialR2TFn PassFunc; 3072fcf3ce44SJohn Forte IMA_UINT i; 3073fcf3ce44SJohn Forte IMA_STATUS status; 3074fcf3ce44SJohn Forte 3075fcf3ce44SJohn Forte if (number_of_plugins == -1) 3076fcf3ce44SJohn Forte InitLibrary(); 3077fcf3ce44SJohn Forte 3078fcf3ce44SJohn Forte if (initialR2T != IMA_TRUE && 3079fcf3ce44SJohn Forte initialR2T != IMA_FALSE) 3080fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3081fcf3ce44SJohn Forte 3082fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 3083fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 3084fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3085fcf3ce44SJohn Forte 3086fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3087fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3088fcf3ce44SJohn Forte 3089fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3090fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 3091fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3092fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3093fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3094fcf3ce44SJohn Forte #ifdef WIN32 3095fcf3ce44SJohn Forte PassFunc = 3096fcf3ce44SJohn Forte (IMA_SetInitialR2TFn) GetProcAddress( 3097fcf3ce44SJohn Forte plugintable[i].hPlugin, 3098fcf3ce44SJohn Forte "IMA_SetInitialR2T"); 3099fcf3ce44SJohn Forte #else 3100fcf3ce44SJohn Forte PassFunc = 3101fcf3ce44SJohn Forte (IMA_SetInitialR2TFn) 3102fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3103fcf3ce44SJohn Forte "IMA_SetInitialR2T"); 3104fcf3ce44SJohn Forte #endif 3105fcf3ce44SJohn Forte 3106fcf3ce44SJohn Forte if (PassFunc != NULL) { 3107fcf3ce44SJohn Forte status = PassFunc(Oid, initialR2T); 3108fcf3ce44SJohn Forte } 3109fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3110fcf3ce44SJohn Forte } 3111fcf3ce44SJohn Forte 3112fcf3ce44SJohn Forte break; 3113fcf3ce44SJohn Forte } 3114fcf3ce44SJohn Forte } 3115fcf3ce44SJohn Forte os_releasemutex(libMutex); 3116fcf3ce44SJohn Forte return (status); 3117fcf3ce44SJohn Forte } 3118fcf3ce44SJohn Forte 3119fcf3ce44SJohn Forte 3120fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetImmediateDataProperties( 3121fcf3ce44SJohn Forte IMA_OID Oid, 3122fcf3ce44SJohn Forte IMA_BOOL_VALUE *pProps) { 3123fcf3ce44SJohn Forte IMA_GetImmediateDataPropertiesFn PassFunc; 3124fcf3ce44SJohn Forte IMA_UINT i; 3125fcf3ce44SJohn Forte IMA_STATUS status; 3126fcf3ce44SJohn Forte 3127fcf3ce44SJohn Forte if (number_of_plugins == -1) 3128fcf3ce44SJohn Forte InitLibrary(); 3129fcf3ce44SJohn Forte 3130fcf3ce44SJohn Forte if (pProps == NULL) 3131fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3132fcf3ce44SJohn Forte 3133fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 3134fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 3135fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3136fcf3ce44SJohn Forte 3137fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3138fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3139fcf3ce44SJohn Forte 3140fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3141fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 3142fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3143fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3144fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3145fcf3ce44SJohn Forte #ifdef WIN32 3146fcf3ce44SJohn Forte PassFunc = 3147fcf3ce44SJohn Forte (IMA_GetImmediateDataPropertiesFn) 3148fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3149fcf3ce44SJohn Forte "IMA_GetImmediateDataProperties"); 3150fcf3ce44SJohn Forte #else 3151fcf3ce44SJohn Forte PassFunc = 3152fcf3ce44SJohn Forte (IMA_GetImmediateDataPropertiesFn) 3153fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3154fcf3ce44SJohn Forte "IMA_GetImmediateDataProperties"); 3155fcf3ce44SJohn Forte #endif 3156fcf3ce44SJohn Forte 3157fcf3ce44SJohn Forte if (PassFunc != NULL) { 3158fcf3ce44SJohn Forte status = PassFunc(Oid, pProps); 3159fcf3ce44SJohn Forte } 3160fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3161fcf3ce44SJohn Forte } 3162fcf3ce44SJohn Forte 3163fcf3ce44SJohn Forte break; 3164fcf3ce44SJohn Forte } 3165fcf3ce44SJohn Forte } 3166fcf3ce44SJohn Forte os_releasemutex(libMutex); 3167fcf3ce44SJohn Forte return (status); 3168fcf3ce44SJohn Forte } 3169fcf3ce44SJohn Forte 3170fcf3ce44SJohn Forte 3171fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetImmediateData( 3172fcf3ce44SJohn Forte IMA_OID Oid, 3173fcf3ce44SJohn Forte IMA_BOOL immediateData) { 3174fcf3ce44SJohn Forte IMA_SetImmediateDataFn PassFunc; 3175fcf3ce44SJohn Forte IMA_UINT i; 3176fcf3ce44SJohn Forte IMA_STATUS status; 3177fcf3ce44SJohn Forte 3178fcf3ce44SJohn Forte if (number_of_plugins == -1) 3179fcf3ce44SJohn Forte InitLibrary(); 3180fcf3ce44SJohn Forte 3181fcf3ce44SJohn Forte if (immediateData != IMA_TRUE && 3182fcf3ce44SJohn Forte immediateData != IMA_FALSE) 3183fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3184fcf3ce44SJohn Forte 3185fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 3186fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 3187fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3188fcf3ce44SJohn Forte 3189fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3190fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3191fcf3ce44SJohn Forte 3192fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3193fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 3194fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3195fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3196fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3197fcf3ce44SJohn Forte #ifdef WIN32 3198fcf3ce44SJohn Forte PassFunc = 3199fcf3ce44SJohn Forte (IMA_SetImmediateDataFn) 3200fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3201fcf3ce44SJohn Forte "IMA_SetImmediateData"); 3202fcf3ce44SJohn Forte #else 3203fcf3ce44SJohn Forte PassFunc = 3204fcf3ce44SJohn Forte (IMA_SetImmediateDataFn) 3205fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3206fcf3ce44SJohn Forte "IMA_SetImmediateData"); 3207fcf3ce44SJohn Forte #endif 3208fcf3ce44SJohn Forte 3209fcf3ce44SJohn Forte if (PassFunc != NULL) { 3210fcf3ce44SJohn Forte status = PassFunc(Oid, immediateData); 3211fcf3ce44SJohn Forte } 3212fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3213fcf3ce44SJohn Forte } 3214fcf3ce44SJohn Forte 3215fcf3ce44SJohn Forte break; 3216fcf3ce44SJohn Forte } 3217fcf3ce44SJohn Forte } 3218fcf3ce44SJohn Forte os_releasemutex(libMutex); 3219fcf3ce44SJohn Forte return (status); 3220fcf3ce44SJohn Forte } 3221fcf3ce44SJohn Forte 3222fcf3ce44SJohn Forte 3223fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetDataPduInOrderProperties( 3224fcf3ce44SJohn Forte IMA_OID Oid, 3225fcf3ce44SJohn Forte IMA_BOOL_VALUE *pProps) { 3226fcf3ce44SJohn Forte IMA_GetDataPduInOrderPropertiesFn PassFunc; 3227fcf3ce44SJohn Forte IMA_UINT i; 3228fcf3ce44SJohn Forte IMA_STATUS status; 3229fcf3ce44SJohn Forte 3230fcf3ce44SJohn Forte if (number_of_plugins == -1) 3231fcf3ce44SJohn Forte InitLibrary(); 3232fcf3ce44SJohn Forte 3233fcf3ce44SJohn Forte if (pProps == NULL) 3234fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3235fcf3ce44SJohn Forte 3236fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 3237fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 3238fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3239fcf3ce44SJohn Forte 3240fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3241fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3242fcf3ce44SJohn Forte 3243fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3244fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 3245fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3246fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3247fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3248fcf3ce44SJohn Forte #ifdef WIN32 3249fcf3ce44SJohn Forte PassFunc = 3250fcf3ce44SJohn Forte (IMA_GetDataPduInOrderPropertiesFn) 3251fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3252fcf3ce44SJohn Forte "IMA_GetDataPduInOrderProperties"); 3253fcf3ce44SJohn Forte #else 3254fcf3ce44SJohn Forte PassFunc = 3255fcf3ce44SJohn Forte (IMA_GetDataPduInOrderPropertiesFn) 3256fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3257fcf3ce44SJohn Forte "IMA_GetDataPduInOrderProperties"); 3258fcf3ce44SJohn Forte #endif 3259fcf3ce44SJohn Forte 3260fcf3ce44SJohn Forte if (PassFunc != NULL) { 3261fcf3ce44SJohn Forte status = PassFunc(Oid, pProps); 3262fcf3ce44SJohn Forte } 3263fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3264fcf3ce44SJohn Forte } 3265fcf3ce44SJohn Forte 3266fcf3ce44SJohn Forte break; 3267fcf3ce44SJohn Forte } 3268fcf3ce44SJohn Forte } 3269fcf3ce44SJohn Forte os_releasemutex(libMutex); 3270fcf3ce44SJohn Forte return (status); 3271fcf3ce44SJohn Forte } 3272fcf3ce44SJohn Forte 3273fcf3ce44SJohn Forte 3274fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetDataPduInOrder( 3275fcf3ce44SJohn Forte IMA_OID Oid, 3276fcf3ce44SJohn Forte IMA_BOOL dataPduInOrder) { 3277fcf3ce44SJohn Forte IMA_SetDataPduInOrderFn PassFunc; 3278fcf3ce44SJohn Forte IMA_UINT i; 3279fcf3ce44SJohn Forte IMA_STATUS status; 3280fcf3ce44SJohn Forte 3281fcf3ce44SJohn Forte if (number_of_plugins == -1) 3282fcf3ce44SJohn Forte InitLibrary(); 3283fcf3ce44SJohn Forte 3284fcf3ce44SJohn Forte if (dataPduInOrder != IMA_TRUE && 3285fcf3ce44SJohn Forte dataPduInOrder != IMA_FALSE) 3286fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3287fcf3ce44SJohn Forte 3288fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 3289fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 3290fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3291fcf3ce44SJohn Forte 3292fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3293fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3294fcf3ce44SJohn Forte 3295fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3296fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 3297fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3298fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3299fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3300fcf3ce44SJohn Forte #ifdef WIN32 3301fcf3ce44SJohn Forte PassFunc = 3302fcf3ce44SJohn Forte (IMA_SetDataPduInOrderFn) 3303fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3304fcf3ce44SJohn Forte "IMA_SetDataPduInOrder"); 3305fcf3ce44SJohn Forte #else 3306fcf3ce44SJohn Forte PassFunc = 3307fcf3ce44SJohn Forte (IMA_SetDataPduInOrderFn) 3308fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3309fcf3ce44SJohn Forte "IMA_SetDataPduInOrder"); 3310fcf3ce44SJohn Forte #endif 3311fcf3ce44SJohn Forte 3312fcf3ce44SJohn Forte if (PassFunc != NULL) { 3313fcf3ce44SJohn Forte status = PassFunc(Oid, dataPduInOrder); 3314fcf3ce44SJohn Forte } 3315fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3316fcf3ce44SJohn Forte } 3317fcf3ce44SJohn Forte 3318fcf3ce44SJohn Forte break; 3319fcf3ce44SJohn Forte } 3320fcf3ce44SJohn Forte } 3321fcf3ce44SJohn Forte os_releasemutex(libMutex); 3322fcf3ce44SJohn Forte return (status); 3323fcf3ce44SJohn Forte } 3324fcf3ce44SJohn Forte 3325fcf3ce44SJohn Forte 3326fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetDataSequenceInOrderProperties( 3327fcf3ce44SJohn Forte IMA_OID Oid, 3328fcf3ce44SJohn Forte IMA_BOOL_VALUE *pProps) { 3329fcf3ce44SJohn Forte IMA_GetDataSequenceInOrderPropertiesFn PassFunc; 3330fcf3ce44SJohn Forte IMA_UINT i; 3331fcf3ce44SJohn Forte IMA_STATUS status; 3332fcf3ce44SJohn Forte 3333fcf3ce44SJohn Forte if (number_of_plugins == -1) 3334fcf3ce44SJohn Forte InitLibrary(); 3335fcf3ce44SJohn Forte 3336fcf3ce44SJohn Forte if (pProps == NULL) 3337fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3338fcf3ce44SJohn Forte 3339fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 3340fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 3341fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3342fcf3ce44SJohn Forte 3343fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3344fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3345fcf3ce44SJohn Forte 3346fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3347fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 3348fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3349fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3350fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3351fcf3ce44SJohn Forte #ifdef WIN32 3352fcf3ce44SJohn Forte PassFunc = 3353fcf3ce44SJohn Forte (IMA_GetDataSequenceInOrderPropertiesFn) 3354fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3355fcf3ce44SJohn Forte "IMA_GetDataSequenceInOrderProperties"); 3356fcf3ce44SJohn Forte #else 3357fcf3ce44SJohn Forte PassFunc = 3358fcf3ce44SJohn Forte (IMA_GetDataSequenceInOrderPropertiesFn) 3359fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3360fcf3ce44SJohn Forte "IMA_GetDataSequenceInOrderProperties"); 3361fcf3ce44SJohn Forte #endif 3362fcf3ce44SJohn Forte 3363fcf3ce44SJohn Forte if (PassFunc != NULL) { 3364fcf3ce44SJohn Forte status = PassFunc(Oid, pProps); 3365fcf3ce44SJohn Forte } 3366fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3367fcf3ce44SJohn Forte } 3368fcf3ce44SJohn Forte 3369fcf3ce44SJohn Forte break; 3370fcf3ce44SJohn Forte } 3371fcf3ce44SJohn Forte } 3372fcf3ce44SJohn Forte os_releasemutex(libMutex); 3373fcf3ce44SJohn Forte return (status); 3374fcf3ce44SJohn Forte } 3375fcf3ce44SJohn Forte 3376fcf3ce44SJohn Forte 3377fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetDataSequenceInOrder( 3378fcf3ce44SJohn Forte IMA_OID Oid, 3379fcf3ce44SJohn Forte IMA_BOOL dataSequenceInOrder) { 3380fcf3ce44SJohn Forte IMA_SetDataSequenceInOrderFn PassFunc; 3381fcf3ce44SJohn Forte IMA_UINT i; 3382fcf3ce44SJohn Forte IMA_STATUS status; 3383fcf3ce44SJohn Forte 3384fcf3ce44SJohn Forte if (number_of_plugins == -1) 3385fcf3ce44SJohn Forte InitLibrary(); 3386fcf3ce44SJohn Forte 3387fcf3ce44SJohn Forte if (dataSequenceInOrder != IMA_TRUE && 3388fcf3ce44SJohn Forte dataSequenceInOrder != IMA_FALSE) 3389fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3390fcf3ce44SJohn Forte 3391fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 3392fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 3393fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3394fcf3ce44SJohn Forte 3395fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3396fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3397fcf3ce44SJohn Forte 3398fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3399fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 3400fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3401fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3402fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3403fcf3ce44SJohn Forte #ifdef WIN32 3404fcf3ce44SJohn Forte PassFunc = 3405fcf3ce44SJohn Forte (IMA_SetDataSequenceInOrderFn) 3406fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3407fcf3ce44SJohn Forte "IMA_SetDataSequenceInOrder"); 3408fcf3ce44SJohn Forte #else 3409fcf3ce44SJohn Forte PassFunc = 3410fcf3ce44SJohn Forte (IMA_SetDataSequenceInOrderFn) 3411fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3412fcf3ce44SJohn Forte "IMA_SetDataSequenceInOrder"); 3413fcf3ce44SJohn Forte #endif 3414fcf3ce44SJohn Forte 3415fcf3ce44SJohn Forte if (PassFunc != NULL) { 3416fcf3ce44SJohn Forte status = PassFunc( 3417fcf3ce44SJohn Forte Oid, dataSequenceInOrder); 3418fcf3ce44SJohn Forte } 3419fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3420fcf3ce44SJohn Forte } 3421fcf3ce44SJohn Forte 3422fcf3ce44SJohn Forte break; 3423fcf3ce44SJohn Forte } 3424fcf3ce44SJohn Forte } 3425fcf3ce44SJohn Forte os_releasemutex(libMutex); 3426fcf3ce44SJohn Forte return (status); 3427fcf3ce44SJohn Forte } 3428fcf3ce44SJohn Forte 3429fcf3ce44SJohn Forte 3430fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetStatisticsCollection( 3431fcf3ce44SJohn Forte IMA_OID Oid, 3432fcf3ce44SJohn Forte IMA_BOOL enableStatisticsCollection) { 3433fcf3ce44SJohn Forte IMA_SetStatisticsCollectionFn PassFunc; 3434fcf3ce44SJohn Forte IMA_UINT i; 3435fcf3ce44SJohn Forte IMA_STATUS status; 3436fcf3ce44SJohn Forte 3437fcf3ce44SJohn Forte if (number_of_plugins == -1) 3438fcf3ce44SJohn Forte InitLibrary(); 3439fcf3ce44SJohn Forte 3440fcf3ce44SJohn Forte if (enableStatisticsCollection != IMA_TRUE && 3441fcf3ce44SJohn Forte enableStatisticsCollection != IMA_FALSE) 3442fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3443fcf3ce44SJohn Forte 3444fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_PHBA && 3445fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 3446fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3447fcf3ce44SJohn Forte 3448fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3449fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3450fcf3ce44SJohn Forte 3451fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3452fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 3453fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3454fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3455fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3456fcf3ce44SJohn Forte #ifdef WIN32 3457fcf3ce44SJohn Forte PassFunc = 3458fcf3ce44SJohn Forte (IMA_SetStatisticsCollectionFn) 3459fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3460fcf3ce44SJohn Forte "IMA_SetStatisticsCollection"); 3461fcf3ce44SJohn Forte #else 3462fcf3ce44SJohn Forte PassFunc = 3463fcf3ce44SJohn Forte (IMA_SetStatisticsCollectionFn) 3464fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3465fcf3ce44SJohn Forte "IMA_SetStatisticsCollection"); 3466fcf3ce44SJohn Forte #endif 3467fcf3ce44SJohn Forte 3468fcf3ce44SJohn Forte if (PassFunc != NULL) { 3469fcf3ce44SJohn Forte status = PassFunc( 3470fcf3ce44SJohn Forte Oid, enableStatisticsCollection); 3471fcf3ce44SJohn Forte } 3472fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3473fcf3ce44SJohn Forte } 3474fcf3ce44SJohn Forte 3475fcf3ce44SJohn Forte break; 3476fcf3ce44SJohn Forte } 3477fcf3ce44SJohn Forte } 3478fcf3ce44SJohn Forte os_releasemutex(libMutex); 3479fcf3ce44SJohn Forte return (status); 3480fcf3ce44SJohn Forte } 3481fcf3ce44SJohn Forte 3482fcf3ce44SJohn Forte 3483fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetNetworkPortStatus( 3484fcf3ce44SJohn Forte IMA_OID portOid, 3485fcf3ce44SJohn Forte IMA_NETWORK_PORT_STATUS *pStatus) { 3486fcf3ce44SJohn Forte IMA_GetNetworkPortStatusFn PassFunc; 3487fcf3ce44SJohn Forte IMA_UINT i; 3488fcf3ce44SJohn Forte IMA_STATUS status; 3489fcf3ce44SJohn Forte 3490fcf3ce44SJohn Forte if (number_of_plugins == -1) 3491fcf3ce44SJohn Forte InitLibrary(); 3492fcf3ce44SJohn Forte 3493fcf3ce44SJohn Forte if (pStatus == NULL) 3494fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3495fcf3ce44SJohn Forte 3496fcf3ce44SJohn Forte if (portOid.objectType != IMA_OBJECT_TYPE_PNP && 3497fcf3ce44SJohn Forte portOid.objectType != IMA_OBJECT_TYPE_LNP) 3498fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3499fcf3ce44SJohn Forte 3500fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3501fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3502fcf3ce44SJohn Forte 3503fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3504fcf3ce44SJohn Forte if (plugintable[i].ownerId == portOid.ownerId) { 3505fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3506fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3507fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3508fcf3ce44SJohn Forte #ifdef WIN32 3509fcf3ce44SJohn Forte PassFunc = 3510fcf3ce44SJohn Forte (IMA_GetNetworkPortStatusFn) 3511fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3512fcf3ce44SJohn Forte "IMA_GetNetworkPortStatus"); 3513fcf3ce44SJohn Forte #else 3514fcf3ce44SJohn Forte PassFunc = 3515fcf3ce44SJohn Forte (IMA_GetNetworkPortStatusFn) 3516fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3517fcf3ce44SJohn Forte "IMA_GetNetworkPortStatus"); 3518fcf3ce44SJohn Forte #endif 3519fcf3ce44SJohn Forte 3520fcf3ce44SJohn Forte if (PassFunc != NULL) { 3521fcf3ce44SJohn Forte status = PassFunc(portOid, pStatus); 3522fcf3ce44SJohn Forte } 3523fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3524fcf3ce44SJohn Forte } 3525fcf3ce44SJohn Forte 3526fcf3ce44SJohn Forte break; 3527fcf3ce44SJohn Forte } 3528fcf3ce44SJohn Forte } 3529fcf3ce44SJohn Forte os_releasemutex(libMutex); 3530fcf3ce44SJohn Forte return (status); 3531fcf3ce44SJohn Forte } 3532fcf3ce44SJohn Forte 3533fcf3ce44SJohn Forte 3534fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetTargetOidList( 3535fcf3ce44SJohn Forte IMA_OID Oid, 3536fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 3537fcf3ce44SJohn Forte IMA_GetTargetOidListFn PassFunc; 3538fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 3539fcf3ce44SJohn Forte IMA_UINT i; 3540fcf3ce44SJohn Forte IMA_STATUS status; 3541fcf3ce44SJohn Forte 3542fcf3ce44SJohn Forte if (number_of_plugins == -1) 3543fcf3ce44SJohn Forte InitLibrary(); 3544fcf3ce44SJohn Forte 3545fcf3ce44SJohn Forte if (ppList == NULL) 3546fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3547fcf3ce44SJohn Forte 3548fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 3549fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_LNP) 3550fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3551fcf3ce44SJohn Forte 3552fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3553fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3554fcf3ce44SJohn Forte 3555fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3556fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 3557fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3558fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3559fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3560fcf3ce44SJohn Forte #ifdef WIN32 3561fcf3ce44SJohn Forte PassFunc = 3562fcf3ce44SJohn Forte (IMA_GetTargetOidListFn) 3563fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3564fcf3ce44SJohn Forte "IMA_GetTargetOidList"); 3565fcf3ce44SJohn Forte #else 3566fcf3ce44SJohn Forte PassFunc = 3567fcf3ce44SJohn Forte (IMA_GetTargetOidListFn) 3568fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3569fcf3ce44SJohn Forte "IMA_GetTargetOidList"); 3570fcf3ce44SJohn Forte #endif 3571fcf3ce44SJohn Forte 3572fcf3ce44SJohn Forte if (PassFunc != NULL) { 3573fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 3574fcf3ce44SJohn Forte IMA_UINT listSize; 3575fcf3ce44SJohn Forte listSize = sizeof (IMA_OID_LIST); 3576fcf3ce44SJohn Forte status = PassFunc(Oid, &ppOidList); 3577fcf3ce44SJohn Forte if (IMA_SUCCESS(status)) { 3578fcf3ce44SJohn Forte *ppList = 3579fcf3ce44SJohn Forte (IMA_OID_LIST*)calloc(1, 3580fcf3ce44SJohn Forte sizeof (IMA_OID_LIST) + 3581fcf3ce44SJohn Forte ((ppOidList->oidCount - 1)* 3582fcf3ce44SJohn Forte sizeof (IMA_OID))); 3583fcf3ce44SJohn Forte 3584fcf3ce44SJohn Forte if ((*ppList) == NULL) { 3585fcf3ce44SJohn Forte return (EUOS_ERROR); 3586fcf3ce44SJohn Forte } 3587fcf3ce44SJohn Forte else 3588fcf3ce44SJohn Forte memcpy((*ppList), 3589fcf3ce44SJohn Forte ppOidList, listSize 3590fcf3ce44SJohn Forte + (ppOidList-> 3591fcf3ce44SJohn Forte oidCount - 1)* 3592fcf3ce44SJohn Forte sizeof (IMA_OID)); 3593fcf3ce44SJohn Forte #ifdef WIN32 3594fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 3595fcf3ce44SJohn Forte GetProcAddress( 3596fcf3ce44SJohn Forte plugintable[i].hPlugin, 3597fcf3ce44SJohn Forte "IMA_FreeMemory"); 3598fcf3ce44SJohn Forte #else 3599fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 3600fcf3ce44SJohn Forte dlsym( 3601fcf3ce44SJohn Forte plugintable[i].hPlugin, 3602fcf3ce44SJohn Forte "IMA_FreeMemory"); 3603fcf3ce44SJohn Forte #endif 3604fcf3ce44SJohn Forte if (FreeFunc != NULL) { 3605fcf3ce44SJohn Forte FreeFunc(ppOidList); 3606fcf3ce44SJohn Forte } 3607fcf3ce44SJohn Forte } 3608fcf3ce44SJohn Forte } 3609fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3610fcf3ce44SJohn Forte } 3611fcf3ce44SJohn Forte 3612fcf3ce44SJohn Forte break; 3613fcf3ce44SJohn Forte } 3614fcf3ce44SJohn Forte } 3615fcf3ce44SJohn Forte os_releasemutex(libMutex); 3616fcf3ce44SJohn Forte return (status); 3617fcf3ce44SJohn Forte } 3618fcf3ce44SJohn Forte 3619fcf3ce44SJohn Forte 3620fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_RemoveStaleData( 3621fcf3ce44SJohn Forte IMA_OID lhbaId) { 3622fcf3ce44SJohn Forte IMA_RemoveStaleDataFn PassFunc; 3623fcf3ce44SJohn Forte IMA_UINT i; 3624fcf3ce44SJohn Forte IMA_STATUS status; 3625fcf3ce44SJohn Forte 3626fcf3ce44SJohn Forte if (number_of_plugins == -1) 3627fcf3ce44SJohn Forte InitLibrary(); 3628fcf3ce44SJohn Forte 3629fcf3ce44SJohn Forte if (lhbaId.objectType != IMA_OBJECT_TYPE_LHBA) 3630fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3631fcf3ce44SJohn Forte 3632fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3633fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3634fcf3ce44SJohn Forte 3635fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3636fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaId.ownerId) { 3637fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3638fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3639fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3640fcf3ce44SJohn Forte #ifdef WIN32 3641fcf3ce44SJohn Forte PassFunc = (IMA_RemoveStaleDataFn) 3642fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3643fcf3ce44SJohn Forte "IMA_RemoveStaleData"); 3644fcf3ce44SJohn Forte #else 3645fcf3ce44SJohn Forte PassFunc = (IMA_RemoveStaleDataFn) 3646fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3647fcf3ce44SJohn Forte "IMA_RemoveStaleData"); 3648fcf3ce44SJohn Forte #endif 3649fcf3ce44SJohn Forte 3650fcf3ce44SJohn Forte if (PassFunc != NULL) { 3651fcf3ce44SJohn Forte status = PassFunc(lhbaId); 3652fcf3ce44SJohn Forte } 3653fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3654fcf3ce44SJohn Forte } 3655fcf3ce44SJohn Forte 3656fcf3ce44SJohn Forte break; 3657fcf3ce44SJohn Forte } 3658fcf3ce44SJohn Forte } 3659fcf3ce44SJohn Forte os_releasemutex(libMutex); 3660fcf3ce44SJohn Forte return (status); 3661fcf3ce44SJohn Forte } 3662fcf3ce44SJohn Forte 3663fcf3ce44SJohn Forte 3664fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetIsnsDiscovery( 3665fcf3ce44SJohn Forte IMA_OID phbaId, 3666fcf3ce44SJohn Forte IMA_BOOL enableIsnsDiscovery, 3667fcf3ce44SJohn Forte IMA_ISNS_DISCOVERY_METHOD discoveryMethod, 3668fcf3ce44SJohn Forte const IMA_HOST_ID *iSnsHost) { 3669fcf3ce44SJohn Forte IMA_SetIsnsDiscoveryFn PassFunc; 3670fcf3ce44SJohn Forte IMA_UINT i; 3671fcf3ce44SJohn Forte IMA_STATUS status; 3672fcf3ce44SJohn Forte 3673fcf3ce44SJohn Forte if (number_of_plugins == -1) 3674fcf3ce44SJohn Forte InitLibrary(); 3675fcf3ce44SJohn Forte 3676fcf3ce44SJohn Forte if (enableIsnsDiscovery != IMA_TRUE && 3677fcf3ce44SJohn Forte enableIsnsDiscovery != IMA_FALSE) 3678fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3679fcf3ce44SJohn Forte 3680fcf3ce44SJohn Forte if (enableIsnsDiscovery == IMA_TRUE && iSnsHost == NULL) 3681fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3682fcf3ce44SJohn Forte 3683fcf3ce44SJohn Forte if (discoveryMethod != IMA_ISNS_DISCOVERY_METHOD_STATIC && 3684fcf3ce44SJohn Forte discoveryMethod != IMA_ISNS_DISCOVERY_METHOD_DHCP && 3685fcf3ce44SJohn Forte discoveryMethod != IMA_ISNS_DISCOVERY_METHOD_SLP) 3686fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3687fcf3ce44SJohn Forte 3688fcf3ce44SJohn Forte if (phbaId.objectType != IMA_OBJECT_TYPE_PHBA && 3689fcf3ce44SJohn Forte phbaId.objectType != IMA_OBJECT_TYPE_LHBA) { 3690fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3691fcf3ce44SJohn Forte } 3692fcf3ce44SJohn Forte 3693fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3694fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3695fcf3ce44SJohn Forte 3696fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3697fcf3ce44SJohn Forte if (plugintable[i].ownerId == phbaId.ownerId) { 3698fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3699fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3700fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3701fcf3ce44SJohn Forte #ifdef WIN32 3702fcf3ce44SJohn Forte PassFunc = 3703fcf3ce44SJohn Forte (IMA_SetIsnsDiscoveryFn) 3704fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3705fcf3ce44SJohn Forte "IMA_SetIsnsDiscovery"); 3706fcf3ce44SJohn Forte #else 3707fcf3ce44SJohn Forte PassFunc = 3708fcf3ce44SJohn Forte (IMA_SetIsnsDiscoveryFn) 3709fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3710fcf3ce44SJohn Forte "IMA_SetIsnsDiscovery"); 3711fcf3ce44SJohn Forte #endif 3712fcf3ce44SJohn Forte 3713fcf3ce44SJohn Forte if (PassFunc != NULL) { 3714fcf3ce44SJohn Forte status = PassFunc(phbaId, 3715fcf3ce44SJohn Forte enableIsnsDiscovery, 3716fcf3ce44SJohn Forte discoveryMethod, iSnsHost); 3717fcf3ce44SJohn Forte } 3718fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3719fcf3ce44SJohn Forte } 3720fcf3ce44SJohn Forte 3721fcf3ce44SJohn Forte break; 3722fcf3ce44SJohn Forte } 3723fcf3ce44SJohn Forte } 3724fcf3ce44SJohn Forte os_releasemutex(libMutex); 3725fcf3ce44SJohn Forte return (status); 3726fcf3ce44SJohn Forte } 3727fcf3ce44SJohn Forte 3728fcf3ce44SJohn Forte 3729fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetSlpDiscovery( 3730fcf3ce44SJohn Forte IMA_OID phbaId, 3731fcf3ce44SJohn Forte IMA_BOOL enableSlpDiscovery) { 3732fcf3ce44SJohn Forte IMA_SetSlpDiscoveryFn PassFunc; 3733fcf3ce44SJohn Forte IMA_UINT i; 3734fcf3ce44SJohn Forte IMA_STATUS status; 3735fcf3ce44SJohn Forte 3736fcf3ce44SJohn Forte if (number_of_plugins == -1) 3737fcf3ce44SJohn Forte InitLibrary(); 3738fcf3ce44SJohn Forte 3739fcf3ce44SJohn Forte if (enableSlpDiscovery != IMA_TRUE && 3740fcf3ce44SJohn Forte enableSlpDiscovery != IMA_FALSE) 3741fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3742fcf3ce44SJohn Forte 3743fcf3ce44SJohn Forte if (phbaId.objectType != IMA_OBJECT_TYPE_PHBA && 3744fcf3ce44SJohn Forte phbaId.objectType != IMA_OBJECT_TYPE_LHBA) 3745fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3746fcf3ce44SJohn Forte 3747fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3748fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3749fcf3ce44SJohn Forte 3750fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3751fcf3ce44SJohn Forte if (plugintable[i].ownerId == phbaId.ownerId) { 3752fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3753fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3754fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3755fcf3ce44SJohn Forte #ifdef WIN32 3756fcf3ce44SJohn Forte PassFunc = 3757fcf3ce44SJohn Forte (IMA_SetSlpDiscoveryFn) 3758fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3759fcf3ce44SJohn Forte "IMA_SetSlpDiscovery"); 3760fcf3ce44SJohn Forte #else 3761fcf3ce44SJohn Forte PassFunc = (IMA_SetSlpDiscoveryFn) 3762fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3763fcf3ce44SJohn Forte "IMA_SetSlpDiscovery"); 3764fcf3ce44SJohn Forte #endif 3765fcf3ce44SJohn Forte 3766fcf3ce44SJohn Forte if (PassFunc != NULL) { 3767fcf3ce44SJohn Forte status = PassFunc( 3768fcf3ce44SJohn Forte phbaId, 3769fcf3ce44SJohn Forte enableSlpDiscovery); 3770fcf3ce44SJohn Forte } 3771fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3772fcf3ce44SJohn Forte } 3773fcf3ce44SJohn Forte 3774fcf3ce44SJohn Forte break; 3775fcf3ce44SJohn Forte } 3776fcf3ce44SJohn Forte } 3777fcf3ce44SJohn Forte os_releasemutex(libMutex); 3778fcf3ce44SJohn Forte return (status); 3779fcf3ce44SJohn Forte } 3780fcf3ce44SJohn Forte 3781fcf3ce44SJohn Forte 3782fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetStaticDiscovery( 3783fcf3ce44SJohn Forte IMA_OID phbaId, 3784fcf3ce44SJohn Forte IMA_BOOL enableStaticDiscovery) { 3785fcf3ce44SJohn Forte IMA_SetStaticDiscoveryFn PassFunc; 3786fcf3ce44SJohn Forte IMA_UINT i; 3787fcf3ce44SJohn Forte IMA_STATUS status; 3788fcf3ce44SJohn Forte 3789fcf3ce44SJohn Forte if (number_of_plugins == -1) 3790fcf3ce44SJohn Forte InitLibrary(); 3791fcf3ce44SJohn Forte 3792fcf3ce44SJohn Forte if (enableStaticDiscovery != IMA_TRUE && 3793fcf3ce44SJohn Forte enableStaticDiscovery != IMA_FALSE) 3794fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3795fcf3ce44SJohn Forte 3796fcf3ce44SJohn Forte if (phbaId.objectType != IMA_OBJECT_TYPE_PHBA && 3797fcf3ce44SJohn Forte phbaId.objectType != IMA_OBJECT_TYPE_LHBA) 3798fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3799fcf3ce44SJohn Forte 3800fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3801fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3802fcf3ce44SJohn Forte 3803fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3804fcf3ce44SJohn Forte if (plugintable[i].ownerId == phbaId.ownerId) { 3805fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3806fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3807fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3808fcf3ce44SJohn Forte #ifdef WIN32 3809fcf3ce44SJohn Forte PassFunc = (IMA_SetStaticDiscoveryFn) 3810fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3811fcf3ce44SJohn Forte "IMA_SetStaticDiscovery"); 3812fcf3ce44SJohn Forte #else 3813fcf3ce44SJohn Forte PassFunc = (IMA_SetStaticDiscoveryFn) 3814fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3815fcf3ce44SJohn Forte "IMA_SetStaticDiscovery"); 3816fcf3ce44SJohn Forte #endif 3817fcf3ce44SJohn Forte 3818fcf3ce44SJohn Forte if (PassFunc != NULL) { 3819fcf3ce44SJohn Forte status = PassFunc( 3820fcf3ce44SJohn Forte phbaId, 3821fcf3ce44SJohn Forte enableStaticDiscovery); 3822fcf3ce44SJohn Forte } 3823fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3824fcf3ce44SJohn Forte } 3825fcf3ce44SJohn Forte 3826fcf3ce44SJohn Forte break; 3827fcf3ce44SJohn Forte } 3828fcf3ce44SJohn Forte } 3829fcf3ce44SJohn Forte os_releasemutex(libMutex); 3830fcf3ce44SJohn Forte return (status); 3831fcf3ce44SJohn Forte } 3832fcf3ce44SJohn Forte 3833fcf3ce44SJohn Forte 3834fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetSendTargetsDiscovery( 3835fcf3ce44SJohn Forte IMA_OID phbaId, 3836fcf3ce44SJohn Forte IMA_BOOL enableSendTargetsDiscovery) { 3837fcf3ce44SJohn Forte IMA_SetSendTargetsDiscoveryFn PassFunc; 3838fcf3ce44SJohn Forte IMA_UINT i; 3839fcf3ce44SJohn Forte IMA_STATUS status; 3840fcf3ce44SJohn Forte 3841fcf3ce44SJohn Forte if (number_of_plugins == -1) 3842fcf3ce44SJohn Forte InitLibrary(); 3843fcf3ce44SJohn Forte 3844fcf3ce44SJohn Forte if (enableSendTargetsDiscovery != IMA_TRUE && 3845fcf3ce44SJohn Forte enableSendTargetsDiscovery != IMA_FALSE) 3846fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 3847fcf3ce44SJohn Forte 3848fcf3ce44SJohn Forte if (phbaId.objectType != IMA_OBJECT_TYPE_PHBA && 3849fcf3ce44SJohn Forte phbaId.objectType != IMA_OBJECT_TYPE_LHBA) { 3850fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 3851fcf3ce44SJohn Forte } 3852fcf3ce44SJohn Forte 3853fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3854fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3855fcf3ce44SJohn Forte 3856fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3857fcf3ce44SJohn Forte if (plugintable[i].ownerId == phbaId.ownerId) { 3858fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3859fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3860fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3861fcf3ce44SJohn Forte #ifdef WIN32 3862fcf3ce44SJohn Forte PassFunc = (IMA_SetSendTargetsDiscoveryFn) 3863fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3864fcf3ce44SJohn Forte "IMA_SetSendTargetsDiscovery"); 3865fcf3ce44SJohn Forte #else 3866fcf3ce44SJohn Forte PassFunc = (IMA_SetSendTargetsDiscoveryFn) 3867fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3868fcf3ce44SJohn Forte "IMA_SetSendTargetsDiscovery"); 3869fcf3ce44SJohn Forte #endif 3870fcf3ce44SJohn Forte 3871fcf3ce44SJohn Forte if (PassFunc != NULL) { 3872fcf3ce44SJohn Forte status = PassFunc( 3873fcf3ce44SJohn Forte phbaId, 3874fcf3ce44SJohn Forte enableSendTargetsDiscovery); 3875fcf3ce44SJohn Forte } 3876fcf3ce44SJohn Forte os_releasemutex( 3877fcf3ce44SJohn Forte plugintable[i].pluginMutex); 3878fcf3ce44SJohn Forte } 3879fcf3ce44SJohn Forte 3880fcf3ce44SJohn Forte break; 3881fcf3ce44SJohn Forte } 3882fcf3ce44SJohn Forte } 3883fcf3ce44SJohn Forte os_releasemutex(libMutex); 3884fcf3ce44SJohn Forte return (status); 3885fcf3ce44SJohn Forte } 3886fcf3ce44SJohn Forte 3887fcf3ce44SJohn Forte /* 3888fcf3ce44SJohn Forte * this forces plugins to rescan all iscsi targets on this 3889fcf3ce44SJohn Forte * ipaddress/port and return a 3890fcf3ce44SJohn Forte * list of discovered targets. 3891fcf3ce44SJohn Forte * ERROR/todo: 3892fcf3ce44SJohn Forte * according to IMA spec., pTargetOidList is allocated by 3893fcf3ce44SJohn Forte * the caller for library to return data, 3894fcf3ce44SJohn Forte * how does a caller know how much space it will be? 3895fcf3ce44SJohn Forte * pTargetOidList should be allocated by the library/plugin 3896fcf3ce44SJohn Forte * like IMA_GetLnpOidList 3897fcf3ce44SJohn Forte */ 3898fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_AddPhbaStaticDiscoveryTarget( 3899fcf3ce44SJohn Forte IMA_OID phbaOid, 3900fcf3ce44SJohn Forte const IMA_TARGET_ADDRESS targetAddress, 3901fcf3ce44SJohn Forte IMA_OID_LIST **pTargetOidList) { 3902fcf3ce44SJohn Forte IMA_AddPhbaStaticDiscoveryTargetFn PassFunc; 3903fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 3904fcf3ce44SJohn Forte IMA_UINT i; 3905fcf3ce44SJohn Forte IMA_STATUS status; 3906fcf3ce44SJohn Forte 3907fcf3ce44SJohn Forte if (number_of_plugins == -1) 3908fcf3ce44SJohn Forte InitLibrary(); 3909fcf3ce44SJohn Forte 3910fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3911fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3912fcf3ce44SJohn Forte 3913fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3914fcf3ce44SJohn Forte 3915fcf3ce44SJohn Forte if (plugintable[i].ownerId == phbaOid.ownerId) { 3916fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3917fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3918fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 3919fcf3ce44SJohn Forte #ifdef WIN32 3920fcf3ce44SJohn Forte PassFunc = 3921fcf3ce44SJohn Forte (IMA_AddPhbaStaticDiscoveryTargetFn) 3922fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 3923fcf3ce44SJohn Forte "IMA_AddPhbaStaticDiscoveryTarget"); 3924fcf3ce44SJohn Forte #else 3925fcf3ce44SJohn Forte PassFunc = 3926fcf3ce44SJohn Forte (IMA_AddPhbaStaticDiscoveryTargetFn) 3927fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 3928fcf3ce44SJohn Forte "IMA_AddPhbaStaticDiscoveryTarget"); 3929fcf3ce44SJohn Forte #endif 3930fcf3ce44SJohn Forte 3931fcf3ce44SJohn Forte if (PassFunc != NULL) { 3932fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 3933fcf3ce44SJohn Forte IMA_UINT listSize; 3934fcf3ce44SJohn Forte listSize = 3935fcf3ce44SJohn Forte sizeof (IMA_OID_LIST); 3936fcf3ce44SJohn Forte status = PassFunc(phbaOid, 3937fcf3ce44SJohn Forte targetAddress, &ppOidList); 3938fcf3ce44SJohn Forte if (IMA_SUCCESS(status)) { 3939fcf3ce44SJohn Forte 3940fcf3ce44SJohn Forte (*pTargetOidList) = 3941fcf3ce44SJohn Forte (IMA_OID_LIST*) 3942fcf3ce44SJohn Forte calloc(1, listSize + 3943fcf3ce44SJohn Forte (ppOidList->oidCount-1)* 3944fcf3ce44SJohn Forte sizeof (IMA_OID)); 3945fcf3ce44SJohn Forte 3946fcf3ce44SJohn Forte if ((*pTargetOidList) == NULL) { 3947fcf3ce44SJohn Forte status = 3948fcf3ce44SJohn Forte EUOS_ERROR; 3949fcf3ce44SJohn Forte } 3950fcf3ce44SJohn Forte memcpy((*pTargetOidList), 3951fcf3ce44SJohn Forte ppOidList, 3952fcf3ce44SJohn Forte listSize + 3953fcf3ce44SJohn Forte (ppOidList->oidCount-1)* 3954fcf3ce44SJohn Forte sizeof (IMA_OID)); 3955fcf3ce44SJohn Forte #ifdef WIN32 3956fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 3957fcf3ce44SJohn Forte GetProcAddress( 3958fcf3ce44SJohn Forte plugintable[i].hPlugin, 3959fcf3ce44SJohn Forte "IMA_FreeMemory"); 3960fcf3ce44SJohn Forte #else 3961fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 3962fcf3ce44SJohn Forte dlsym( 3963fcf3ce44SJohn Forte plugintable[i].hPlugin, 3964fcf3ce44SJohn Forte "IMA_FreeMemory"); 3965fcf3ce44SJohn Forte #endif 3966fcf3ce44SJohn Forte if (FreeFunc != NULL) { 3967fcf3ce44SJohn Forte FreeFunc(ppOidList); 3968fcf3ce44SJohn Forte } 3969fcf3ce44SJohn Forte } 3970fcf3ce44SJohn Forte } 3971fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 3972fcf3ce44SJohn Forte } 3973fcf3ce44SJohn Forte 3974fcf3ce44SJohn Forte break; 3975fcf3ce44SJohn Forte } 3976fcf3ce44SJohn Forte } 3977fcf3ce44SJohn Forte os_releasemutex(libMutex); 3978fcf3ce44SJohn Forte return (status); 3979fcf3ce44SJohn Forte } 3980fcf3ce44SJohn Forte 3981fcf3ce44SJohn Forte 3982fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_RemovePhbaStaticDiscoveryTarget( 3983fcf3ce44SJohn Forte IMA_OID phbaOid, 3984fcf3ce44SJohn Forte IMA_OID targetOid) { 3985fcf3ce44SJohn Forte IMA_RemovePhbaStaticDiscoveryTargetFn PassFunc; 3986fcf3ce44SJohn Forte IMA_UINT i; 3987fcf3ce44SJohn Forte IMA_STATUS status; 3988fcf3ce44SJohn Forte 3989fcf3ce44SJohn Forte if (number_of_plugins == -1) 3990fcf3ce44SJohn Forte InitLibrary(); 3991fcf3ce44SJohn Forte 3992fcf3ce44SJohn Forte os_obtainmutex(libMutex); 3993fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 3994fcf3ce44SJohn Forte 3995fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 3996fcf3ce44SJohn Forte if (plugintable[i].ownerId == targetOid.ownerId) { 3997fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 3998fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 3999fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4000fcf3ce44SJohn Forte #ifdef WIN32 4001fcf3ce44SJohn Forte PassFunc = 4002fcf3ce44SJohn Forte (IMA_RemovePhbaStaticDiscoveryTargetFn) 4003fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4004fcf3ce44SJohn Forte "IMA_RemovePhbaStaticDiscoveryTarget"); 4005fcf3ce44SJohn Forte #else 4006fcf3ce44SJohn Forte PassFunc = 4007fcf3ce44SJohn Forte (IMA_RemovePhbaStaticDiscoveryTargetFn) 4008fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4009fcf3ce44SJohn Forte "IMA_RemovePhbaStaticDiscoveryTarget"); 4010fcf3ce44SJohn Forte #endif 4011fcf3ce44SJohn Forte 4012fcf3ce44SJohn Forte if (PassFunc != NULL) { 4013fcf3ce44SJohn Forte status = PassFunc(phbaOid, targetOid); 4014fcf3ce44SJohn Forte } 4015fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4016fcf3ce44SJohn Forte } 4017fcf3ce44SJohn Forte 4018fcf3ce44SJohn Forte break; 4019fcf3ce44SJohn Forte } 4020fcf3ce44SJohn Forte } 4021fcf3ce44SJohn Forte os_releasemutex(libMutex); 4022fcf3ce44SJohn Forte return (status); 4023fcf3ce44SJohn Forte } 4024fcf3ce44SJohn Forte 4025fcf3ce44SJohn Forte 4026fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetPnpOidList( 4027fcf3ce44SJohn Forte IMA_OID Oid, 4028fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 4029fcf3ce44SJohn Forte IMA_GetPnpOidListFn PassFunc; 4030fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 4031fcf3ce44SJohn Forte IMA_UINT i; 4032fcf3ce44SJohn Forte IMA_STATUS status; 4033fcf3ce44SJohn Forte 4034fcf3ce44SJohn Forte if (number_of_plugins == -1) 4035fcf3ce44SJohn Forte InitLibrary(); 4036fcf3ce44SJohn Forte 4037fcf3ce44SJohn Forte if (ppList == NULL) 4038fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4039fcf3ce44SJohn Forte 4040fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_PHBA && 4041fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_LNP) 4042fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4043fcf3ce44SJohn Forte 4044fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4045fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4046fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4047fcf3ce44SJohn Forte 4048fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 4049fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4050fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4051fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4052fcf3ce44SJohn Forte #ifdef WIN32 4053fcf3ce44SJohn Forte PassFunc = (IMA_GetPnpOidListFn) 4054fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4055fcf3ce44SJohn Forte "IMA_GetPnpOidList"); 4056fcf3ce44SJohn Forte #else 4057fcf3ce44SJohn Forte PassFunc = (IMA_GetPnpOidListFn) 4058fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4059fcf3ce44SJohn Forte "IMA_GetPnpOidList"); 4060fcf3ce44SJohn Forte #endif 4061fcf3ce44SJohn Forte 4062fcf3ce44SJohn Forte if (PassFunc != NULL) { 4063fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 4064fcf3ce44SJohn Forte 4065fcf3ce44SJohn Forte status = PassFunc(Oid, &ppOidList); 4066fcf3ce44SJohn Forte if (IMA_SUCCESS(status)) { 4067fcf3ce44SJohn Forte IMA_UINT listSize; 4068fcf3ce44SJohn Forte listSize = 4069fcf3ce44SJohn Forte sizeof (IMA_OID_LIST); 4070fcf3ce44SJohn Forte *ppList = (IMA_OID_LIST*) 4071fcf3ce44SJohn Forte calloc(1, listSize + 4072fcf3ce44SJohn Forte (ppOidList->oidCount-1)* 4073fcf3ce44SJohn Forte sizeof (IMA_OID)); 4074fcf3ce44SJohn Forte 4075fcf3ce44SJohn Forte if ((*ppList) == NULL) { 4076fcf3ce44SJohn Forte status = 4077fcf3ce44SJohn Forte EUOS_ERROR; 4078fcf3ce44SJohn Forte } 4079fcf3ce44SJohn Forte else 4080fcf3ce44SJohn Forte memcpy((*ppList), 4081fcf3ce44SJohn Forte ppOidList, 4082fcf3ce44SJohn Forte listSize + 4083fcf3ce44SJohn Forte (ppOidList-> 4084fcf3ce44SJohn Forte oidCount - 1)* 4085fcf3ce44SJohn Forte sizeof (IMA_OID)); 4086fcf3ce44SJohn Forte #ifdef WIN32 4087fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 4088fcf3ce44SJohn Forte GetProcAddress( 4089fcf3ce44SJohn Forte plugintable[i].hPlugin, 4090fcf3ce44SJohn Forte "IMA_FreeMemory"); 4091fcf3ce44SJohn Forte #else 4092fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 4093fcf3ce44SJohn Forte dlsym( 4094fcf3ce44SJohn Forte plugintable[i].hPlugin, 4095fcf3ce44SJohn Forte "IMA_FreeMemory"); 4096fcf3ce44SJohn Forte #endif 4097fcf3ce44SJohn Forte if (FreeFunc != NULL) { 4098fcf3ce44SJohn Forte FreeFunc(ppOidList); 4099fcf3ce44SJohn Forte } 4100fcf3ce44SJohn Forte } 4101fcf3ce44SJohn Forte } 4102fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4103fcf3ce44SJohn Forte } 4104fcf3ce44SJohn Forte 4105fcf3ce44SJohn Forte break; 4106fcf3ce44SJohn Forte } 4107fcf3ce44SJohn Forte } 4108fcf3ce44SJohn Forte os_releasemutex(libMutex); 4109fcf3ce44SJohn Forte return (status); 4110fcf3ce44SJohn Forte } 4111fcf3ce44SJohn Forte 4112fcf3ce44SJohn Forte 4113fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetPhbaDownloadProperties( 4114fcf3ce44SJohn Forte IMA_OID phbaId, 4115fcf3ce44SJohn Forte IMA_PHBA_DOWNLOAD_PROPERTIES *pProps) { 4116fcf3ce44SJohn Forte IMA_GetPhbaDownloadPropertiesFn PassFunc; 4117fcf3ce44SJohn Forte IMA_UINT i; 4118fcf3ce44SJohn Forte IMA_STATUS status; 4119fcf3ce44SJohn Forte 4120fcf3ce44SJohn Forte if (number_of_plugins == -1) 4121fcf3ce44SJohn Forte InitLibrary(); 4122fcf3ce44SJohn Forte 4123fcf3ce44SJohn Forte if (pProps == NULL) 4124fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4125fcf3ce44SJohn Forte 4126fcf3ce44SJohn Forte if (phbaId.objectType != IMA_OBJECT_TYPE_PHBA) 4127fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4128fcf3ce44SJohn Forte 4129fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4130fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4131fcf3ce44SJohn Forte 4132fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4133fcf3ce44SJohn Forte if (plugintable[i].ownerId == phbaId.ownerId) { 4134fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4135fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4136fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4137fcf3ce44SJohn Forte #ifdef WIN32 4138fcf3ce44SJohn Forte PassFunc = 4139fcf3ce44SJohn Forte (IMA_GetPhbaDownloadPropertiesFn) 4140fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4141fcf3ce44SJohn Forte "IMA_GetPhbaDownloadProperties"); 4142fcf3ce44SJohn Forte #else 4143fcf3ce44SJohn Forte PassFunc = (IMA_GetPhbaDownloadPropertiesFn) 4144fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4145fcf3ce44SJohn Forte "IMA_GetPhbaDownloadProperties"); 4146fcf3ce44SJohn Forte #endif 4147fcf3ce44SJohn Forte 4148fcf3ce44SJohn Forte if (PassFunc != NULL) { 4149fcf3ce44SJohn Forte status = PassFunc(phbaId, pProps); 4150fcf3ce44SJohn Forte } 4151fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4152fcf3ce44SJohn Forte } 4153fcf3ce44SJohn Forte 4154fcf3ce44SJohn Forte break; 4155fcf3ce44SJohn Forte } 4156fcf3ce44SJohn Forte } 4157fcf3ce44SJohn Forte os_releasemutex(libMutex); 4158fcf3ce44SJohn Forte return (status); 4159fcf3ce44SJohn Forte } 4160fcf3ce44SJohn Forte 4161fcf3ce44SJohn Forte 4162fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_IsPhbaDownloadFile( 4163fcf3ce44SJohn Forte IMA_OID phbaId, 4164fcf3ce44SJohn Forte const IMA_WCHAR *pFileName, 4165fcf3ce44SJohn Forte IMA_PHBA_DOWNLOAD_IMAGE_PROPERTIES *pProps) { 4166fcf3ce44SJohn Forte IMA_IsPhbaDownloadFileFn PassFunc; 4167fcf3ce44SJohn Forte IMA_UINT i; 4168fcf3ce44SJohn Forte IMA_STATUS status; 4169fcf3ce44SJohn Forte 4170fcf3ce44SJohn Forte if (number_of_plugins == -1) 4171fcf3ce44SJohn Forte InitLibrary(); 4172fcf3ce44SJohn Forte 4173fcf3ce44SJohn Forte if (pFileName == NULL || pProps == NULL) 4174fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4175fcf3ce44SJohn Forte 4176fcf3ce44SJohn Forte if (phbaId.objectType != IMA_OBJECT_TYPE_PHBA) 4177fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4178fcf3ce44SJohn Forte 4179fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4180fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4181fcf3ce44SJohn Forte 4182fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4183fcf3ce44SJohn Forte if (plugintable[i].ownerId == phbaId.ownerId) { 4184fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4185fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4186fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4187fcf3ce44SJohn Forte #ifdef WIN32 4188fcf3ce44SJohn Forte PassFunc = (IMA_IsPhbaDownloadFileFn) 4189fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4190fcf3ce44SJohn Forte "IMA_IsPhbaDownloadFile"); 4191fcf3ce44SJohn Forte #else 4192fcf3ce44SJohn Forte PassFunc = (IMA_IsPhbaDownloadFileFn) 4193fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4194fcf3ce44SJohn Forte "IMA_IsPhbaDownloadFile"); 4195fcf3ce44SJohn Forte #endif 4196fcf3ce44SJohn Forte 4197fcf3ce44SJohn Forte if (PassFunc != NULL) { 4198fcf3ce44SJohn Forte status = PassFunc( 4199fcf3ce44SJohn Forte phbaId, pFileName, pProps); 4200fcf3ce44SJohn Forte } 4201fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4202fcf3ce44SJohn Forte } 4203fcf3ce44SJohn Forte 4204fcf3ce44SJohn Forte break; 4205fcf3ce44SJohn Forte } 4206fcf3ce44SJohn Forte } 4207fcf3ce44SJohn Forte os_releasemutex(libMutex); 4208fcf3ce44SJohn Forte return (status); 4209fcf3ce44SJohn Forte } 4210fcf3ce44SJohn Forte 4211fcf3ce44SJohn Forte 4212fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_PhbaDownload( 4213fcf3ce44SJohn Forte IMA_OID phbaId, 4214fcf3ce44SJohn Forte IMA_PHBA_DOWNLOAD_IMAGE_TYPE imageType, 4215fcf3ce44SJohn Forte const IMA_WCHAR *pFileName) { 4216fcf3ce44SJohn Forte IMA_PhbaDownloadFn PassFunc; 4217fcf3ce44SJohn Forte IMA_UINT i; 4218fcf3ce44SJohn Forte IMA_STATUS status; 4219fcf3ce44SJohn Forte 4220fcf3ce44SJohn Forte if (number_of_plugins == -1) 4221fcf3ce44SJohn Forte InitLibrary(); 4222fcf3ce44SJohn Forte 4223fcf3ce44SJohn Forte if (phbaId.objectType != IMA_OBJECT_TYPE_PHBA) 4224fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4225fcf3ce44SJohn Forte 4226fcf3ce44SJohn Forte if (imageType != IMA_DOWNLOAD_IMAGE_TYPE_FIRMWARE && 4227fcf3ce44SJohn Forte imageType != IMA_DOWNLOAD_IMAGE_TYPE_OPTION_ROM && 4228fcf3ce44SJohn Forte imageType != IMA_DOWNLOAD_IMAGE_TYPE_ALL && 4229fcf3ce44SJohn Forte imageType != IMA_DOWNLOAD_IMAGE_TYPE_BOOTCODE) 4230fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4231fcf3ce44SJohn Forte 4232fcf3ce44SJohn Forte if (pFileName == NULL) 4233fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4234fcf3ce44SJohn Forte 4235fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4236fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4237fcf3ce44SJohn Forte 4238fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4239fcf3ce44SJohn Forte if (plugintable[i].ownerId == phbaId.ownerId) { 4240fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4241fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4242fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4243fcf3ce44SJohn Forte #ifdef WIN32 4244fcf3ce44SJohn Forte PassFunc = (IMA_PhbaDownloadFn) 4245fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4246fcf3ce44SJohn Forte "IMA_PhbaDownload"); 4247fcf3ce44SJohn Forte #else 4248fcf3ce44SJohn Forte PassFunc = (IMA_PhbaDownloadFn) 4249fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4250fcf3ce44SJohn Forte "IMA_PhbaDownload"); 4251fcf3ce44SJohn Forte #endif 4252fcf3ce44SJohn Forte 4253fcf3ce44SJohn Forte if (PassFunc != NULL) { 4254fcf3ce44SJohn Forte status = PassFunc( 4255fcf3ce44SJohn Forte phbaId, imageType, pFileName); 4256fcf3ce44SJohn Forte } 4257fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4258fcf3ce44SJohn Forte } 4259fcf3ce44SJohn Forte 4260fcf3ce44SJohn Forte break; 4261fcf3ce44SJohn Forte } 4262fcf3ce44SJohn Forte } 4263fcf3ce44SJohn Forte os_releasemutex(libMutex); 4264fcf3ce44SJohn Forte return (status); 4265fcf3ce44SJohn Forte } 4266fcf3ce44SJohn Forte 4267fcf3ce44SJohn Forte 4268fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetNetworkPortalProperties( 4269fcf3ce44SJohn Forte IMA_OID networkPortalId, 4270fcf3ce44SJohn Forte IMA_NETWORK_PORTAL_PROPERTIES *pProps) { 4271fcf3ce44SJohn Forte IMA_GetNetworkPortalPropertiesFn PassFunc; 4272fcf3ce44SJohn Forte IMA_UINT i; 4273fcf3ce44SJohn Forte IMA_STATUS status; 4274fcf3ce44SJohn Forte 4275fcf3ce44SJohn Forte if (number_of_plugins == -1) 4276fcf3ce44SJohn Forte InitLibrary(); 4277fcf3ce44SJohn Forte 4278fcf3ce44SJohn Forte if (pProps == NULL) 4279fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4280fcf3ce44SJohn Forte 4281fcf3ce44SJohn Forte if (networkPortalId.objectType != IMA_OBJECT_TYPE_NETWORK_PORTAL) 4282fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4283fcf3ce44SJohn Forte 4284fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4285fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4286fcf3ce44SJohn Forte 4287fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4288fcf3ce44SJohn Forte if (plugintable[i].ownerId == networkPortalId.ownerId) { 4289fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4290fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4291fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4292fcf3ce44SJohn Forte #ifdef WIN32 4293fcf3ce44SJohn Forte PassFunc = 4294fcf3ce44SJohn Forte (IMA_GetNetworkPortalPropertiesFn) 4295fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4296fcf3ce44SJohn Forte "IMA_GetNetworkPortalProperties"); 4297fcf3ce44SJohn Forte #else 4298fcf3ce44SJohn Forte PassFunc = 4299fcf3ce44SJohn Forte (IMA_GetNetworkPortalPropertiesFn) 4300fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4301fcf3ce44SJohn Forte "IMA_GetNetworkPortalProperties"); 4302fcf3ce44SJohn Forte #endif 4303fcf3ce44SJohn Forte 4304fcf3ce44SJohn Forte if (PassFunc != NULL) { 4305fcf3ce44SJohn Forte status = PassFunc( 4306fcf3ce44SJohn Forte networkPortalId, pProps); 4307fcf3ce44SJohn Forte } 4308fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4309fcf3ce44SJohn Forte } 4310fcf3ce44SJohn Forte 4311fcf3ce44SJohn Forte break; 4312fcf3ce44SJohn Forte } 4313fcf3ce44SJohn Forte } 4314fcf3ce44SJohn Forte os_releasemutex(libMutex); 4315fcf3ce44SJohn Forte return (status); 4316fcf3ce44SJohn Forte } 4317fcf3ce44SJohn Forte 4318fcf3ce44SJohn Forte 4319fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetNetworkPortalIpAddress( 4320fcf3ce44SJohn Forte IMA_OID networkPortalId, 4321fcf3ce44SJohn Forte const IMA_IP_ADDRESS NewIpAddress) { 4322fcf3ce44SJohn Forte IMA_SetNetworkPortalIpAddressFn PassFunc; 4323fcf3ce44SJohn Forte IMA_UINT i; 4324fcf3ce44SJohn Forte IMA_STATUS status; 4325fcf3ce44SJohn Forte 4326fcf3ce44SJohn Forte if (number_of_plugins == -1) 4327fcf3ce44SJohn Forte InitLibrary(); 4328fcf3ce44SJohn Forte 4329fcf3ce44SJohn Forte if (networkPortalId.objectType != IMA_OBJECT_TYPE_NETWORK_PORTAL) 4330fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4331fcf3ce44SJohn Forte 4332fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4333fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4334fcf3ce44SJohn Forte 4335fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4336fcf3ce44SJohn Forte if (plugintable[i].ownerId == networkPortalId.ownerId) { 4337fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4338fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4339fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4340fcf3ce44SJohn Forte #ifdef WIN32 4341fcf3ce44SJohn Forte PassFunc = 4342fcf3ce44SJohn Forte (IMA_SetNetworkPortalIpAddressFn) 4343fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4344fcf3ce44SJohn Forte "IMA_SetNetworkPortalIpAddress"); 4345fcf3ce44SJohn Forte #else 4346fcf3ce44SJohn Forte PassFunc = (IMA_SetNetworkPortalIpAddressFn) 4347fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4348fcf3ce44SJohn Forte "IMA_SetNetworkPortalIpAddress"); 4349fcf3ce44SJohn Forte #endif 4350fcf3ce44SJohn Forte 4351fcf3ce44SJohn Forte if (PassFunc != NULL) { 4352fcf3ce44SJohn Forte status = PassFunc( 4353fcf3ce44SJohn Forte networkPortalId, NewIpAddress); 4354fcf3ce44SJohn Forte } 4355fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4356fcf3ce44SJohn Forte } 4357fcf3ce44SJohn Forte 4358fcf3ce44SJohn Forte break; 4359fcf3ce44SJohn Forte } 4360fcf3ce44SJohn Forte } 4361fcf3ce44SJohn Forte os_releasemutex(libMutex); 4362fcf3ce44SJohn Forte return (status); 4363fcf3ce44SJohn Forte } 4364fcf3ce44SJohn Forte 4365fcf3ce44SJohn Forte 4366fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetLnpOidList( 4367fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 4368fcf3ce44SJohn Forte IMA_GetLnpOidListFn PassFunc; 4369fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 4370fcf3ce44SJohn Forte 4371fcf3ce44SJohn Forte IMA_UINT i; 4372fcf3ce44SJohn Forte IMA_UINT j; 4373fcf3ce44SJohn Forte IMA_UINT totalIdCount; 4374fcf3ce44SJohn Forte IMA_STATUS status; 4375fcf3ce44SJohn Forte 4376fcf3ce44SJohn Forte if (number_of_plugins == -1) 4377fcf3ce44SJohn Forte InitLibrary(); 4378fcf3ce44SJohn Forte 4379fcf3ce44SJohn Forte if (ppList == NULL) 4380fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4381fcf3ce44SJohn Forte 4382fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4383fcf3ce44SJohn Forte // Get total id count first 4384fcf3ce44SJohn Forte totalIdCount = 0; 4385fcf3ce44SJohn Forte 4386fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4387fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4388fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4389fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4390fcf3ce44SJohn Forte #ifdef WIN32 4391fcf3ce44SJohn Forte PassFunc = (IMA_GetLnpOidListFn) 4392fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4393fcf3ce44SJohn Forte "IMA_GetLnpOidList"); 4394fcf3ce44SJohn Forte #else 4395fcf3ce44SJohn Forte PassFunc = (IMA_GetLnpOidListFn) 4396fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4397fcf3ce44SJohn Forte "IMA_GetLnpOidList"); 4398fcf3ce44SJohn Forte #endif 4399fcf3ce44SJohn Forte if (PassFunc != NULL) { 4400fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 4401fcf3ce44SJohn Forte status = PassFunc(&ppOidList); 4402fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 4403fcf3ce44SJohn Forte totalIdCount += ppOidList->oidCount; 4404fcf3ce44SJohn Forte #ifdef WIN32 4405fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 4406fcf3ce44SJohn Forte GetProcAddress( 4407fcf3ce44SJohn Forte plugintable[i].hPlugin, 4408fcf3ce44SJohn Forte "IMA_FreeMemory"); 4409fcf3ce44SJohn Forte #else 4410fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 4411fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4412fcf3ce44SJohn Forte "IMA_FreeMemory"); 4413fcf3ce44SJohn Forte #endif 4414fcf3ce44SJohn Forte if (FreeFunc != NULL) { 4415fcf3ce44SJohn Forte FreeFunc(ppOidList); 4416fcf3ce44SJohn Forte } 4417fcf3ce44SJohn Forte } 4418fcf3ce44SJohn Forte } 4419fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4420fcf3ce44SJohn Forte } 4421fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 4422fcf3ce44SJohn Forte break; 4423fcf3ce44SJohn Forte } 4424fcf3ce44SJohn Forte 4425fcf3ce44SJohn Forte } 4426fcf3ce44SJohn Forte 4427fcf3ce44SJohn Forte 4428fcf3ce44SJohn Forte *ppList = (IMA_OID_LIST*)calloc(1, 4429fcf3ce44SJohn Forte sizeof (IMA_OID_LIST) + (totalIdCount - 1)* sizeof (IMA_OID)); 4430fcf3ce44SJohn Forte 4431fcf3ce44SJohn Forte if ((*ppList) == NULL) { 4432fcf3ce44SJohn Forte os_releasemutex(libMutex); 4433fcf3ce44SJohn Forte return (IMA_ERROR_UNEXPECTED_OS_ERROR); 4434fcf3ce44SJohn Forte } 4435fcf3ce44SJohn Forte 4436fcf3ce44SJohn Forte (*ppList)->oidCount = totalIdCount; 4437fcf3ce44SJohn Forte 4438fcf3ce44SJohn Forte // 2nd pass to copy the id lists 4439fcf3ce44SJohn Forte totalIdCount = 0; 4440fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 4441fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4442fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4443fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4444fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4445fcf3ce44SJohn Forte #ifdef WIN32 4446fcf3ce44SJohn Forte PassFunc = (IMA_GetLnpOidListFn) 4447fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4448fcf3ce44SJohn Forte "IMA_GetLnpOidList"); 4449fcf3ce44SJohn Forte #else 4450fcf3ce44SJohn Forte PassFunc = (IMA_GetLnpOidListFn) 4451fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4452fcf3ce44SJohn Forte "IMA_GetLnpOidList"); 4453fcf3ce44SJohn Forte #endif 4454fcf3ce44SJohn Forte if (PassFunc != NULL) { 4455fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 4456fcf3ce44SJohn Forte status = PassFunc(&ppOidList); 4457fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 4458fcf3ce44SJohn Forte for (j = 0; (j < ppOidList->oidCount) && 4459fcf3ce44SJohn Forte (totalIdCount < 4460fcf3ce44SJohn Forte (*ppList)->oidCount); 4461fcf3ce44SJohn Forte j++) { 4462fcf3ce44SJohn Forte (*ppList)->oids[totalIdCount]. 4463fcf3ce44SJohn Forte objectType = 4464fcf3ce44SJohn Forte ppOidList->oids[j]. 4465fcf3ce44SJohn Forte objectType; 4466fcf3ce44SJohn Forte (*ppList)->oids[totalIdCount]. 4467fcf3ce44SJohn Forte objectSequenceNumber = 4468fcf3ce44SJohn Forte ppOidList->oids[j]. 4469fcf3ce44SJohn Forte objectSequenceNumber; 4470fcf3ce44SJohn Forte 4471fcf3ce44SJohn Forte (*ppList)->oids[totalIdCount]. 4472fcf3ce44SJohn Forte ownerId = 4473fcf3ce44SJohn Forte ppOidList->oids[j].ownerId; 4474fcf3ce44SJohn Forte totalIdCount++; 4475fcf3ce44SJohn Forte } 4476fcf3ce44SJohn Forte #ifdef WIN32 4477fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 4478fcf3ce44SJohn Forte GetProcAddress( 4479fcf3ce44SJohn Forte plugintable[i].hPlugin, 4480fcf3ce44SJohn Forte "IMA_FreeMemory"); 4481fcf3ce44SJohn Forte #else 4482fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 4483fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4484fcf3ce44SJohn Forte "IMA_FreeMemory"); 4485fcf3ce44SJohn Forte #endif 4486fcf3ce44SJohn Forte if (FreeFunc != NULL) { 4487fcf3ce44SJohn Forte FreeFunc(ppOidList); 4488fcf3ce44SJohn Forte } 4489fcf3ce44SJohn Forte } 4490fcf3ce44SJohn Forte } 4491fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4492fcf3ce44SJohn Forte } 4493fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 4494fcf3ce44SJohn Forte free(*ppList); 4495fcf3ce44SJohn Forte break; 4496fcf3ce44SJohn Forte } 4497fcf3ce44SJohn Forte 4498fcf3ce44SJohn Forte } 4499fcf3ce44SJohn Forte os_releasemutex(libMutex); 4500fcf3ce44SJohn Forte return (status); 4501fcf3ce44SJohn Forte } 4502fcf3ce44SJohn Forte 4503fcf3ce44SJohn Forte 4504fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetLnpProperties( 4505fcf3ce44SJohn Forte IMA_OID lnpId, 4506fcf3ce44SJohn Forte IMA_LNP_PROPERTIES *pProps) { 4507fcf3ce44SJohn Forte IMA_GetLnpPropertiesFn PassFunc; 4508fcf3ce44SJohn Forte IMA_UINT i; 4509fcf3ce44SJohn Forte IMA_STATUS status; 4510fcf3ce44SJohn Forte 4511fcf3ce44SJohn Forte if (number_of_plugins == -1) 4512fcf3ce44SJohn Forte InitLibrary(); 4513fcf3ce44SJohn Forte 4514fcf3ce44SJohn Forte if (pProps == NULL) 4515fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4516fcf3ce44SJohn Forte 4517fcf3ce44SJohn Forte if (lnpId.objectType != IMA_OBJECT_TYPE_LNP) 4518fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4519fcf3ce44SJohn Forte 4520fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4521fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4522fcf3ce44SJohn Forte 4523fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4524fcf3ce44SJohn Forte if (plugintable[i].ownerId == lnpId.ownerId) { 4525fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4526fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4527fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4528fcf3ce44SJohn Forte #ifdef WIN32 4529fcf3ce44SJohn Forte PassFunc = (IMA_GetLnpPropertiesFn) 4530fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4531fcf3ce44SJohn Forte "IMA_GetLnpProperties"); 4532fcf3ce44SJohn Forte #else 4533fcf3ce44SJohn Forte PassFunc = (IMA_GetLnpPropertiesFn) 4534fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4535fcf3ce44SJohn Forte "IMA_GetLnpProperties"); 4536fcf3ce44SJohn Forte #endif 4537fcf3ce44SJohn Forte 4538fcf3ce44SJohn Forte if (PassFunc != NULL) { 4539fcf3ce44SJohn Forte status = PassFunc(lnpId, pProps); 4540fcf3ce44SJohn Forte } 4541fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4542fcf3ce44SJohn Forte } 4543fcf3ce44SJohn Forte 4544fcf3ce44SJohn Forte break; 4545fcf3ce44SJohn Forte } 4546fcf3ce44SJohn Forte } 4547fcf3ce44SJohn Forte os_releasemutex(libMutex); 4548fcf3ce44SJohn Forte return (status); 4549fcf3ce44SJohn Forte } 4550fcf3ce44SJohn Forte 4551fcf3ce44SJohn Forte 4552fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetPnpProperties( 4553fcf3ce44SJohn Forte IMA_OID pnpId, 4554fcf3ce44SJohn Forte IMA_PNP_PROPERTIES *pProps) { 4555fcf3ce44SJohn Forte IMA_GetPnpPropertiesFn PassFunc; 4556fcf3ce44SJohn Forte IMA_UINT i; 4557fcf3ce44SJohn Forte IMA_STATUS status; 4558fcf3ce44SJohn Forte 4559fcf3ce44SJohn Forte if (number_of_plugins == -1) 4560fcf3ce44SJohn Forte InitLibrary(); 4561fcf3ce44SJohn Forte 4562fcf3ce44SJohn Forte if (pProps == NULL) 4563fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4564fcf3ce44SJohn Forte 4565fcf3ce44SJohn Forte if (pnpId.objectType != IMA_OBJECT_TYPE_PNP) 4566fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4567fcf3ce44SJohn Forte 4568fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4569fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4570fcf3ce44SJohn Forte 4571fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4572fcf3ce44SJohn Forte if (plugintable[i].ownerId == pnpId.ownerId) { 4573fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4574fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4575fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4576fcf3ce44SJohn Forte #ifdef WIN32 4577fcf3ce44SJohn Forte PassFunc = (IMA_GetPnpPropertiesFn) 4578fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4579fcf3ce44SJohn Forte "IMA_GetPnpProperties"); 4580fcf3ce44SJohn Forte #else 4581fcf3ce44SJohn Forte PassFunc = (IMA_GetPnpPropertiesFn) 4582fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4583fcf3ce44SJohn Forte "IMA_GetPnpProperties"); 4584fcf3ce44SJohn Forte #endif 4585fcf3ce44SJohn Forte 4586fcf3ce44SJohn Forte if (PassFunc != NULL) { 4587fcf3ce44SJohn Forte status = PassFunc(pnpId, pProps); 4588fcf3ce44SJohn Forte } 4589fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4590fcf3ce44SJohn Forte } 4591fcf3ce44SJohn Forte 4592fcf3ce44SJohn Forte break; 4593fcf3ce44SJohn Forte } 4594fcf3ce44SJohn Forte } 4595fcf3ce44SJohn Forte os_releasemutex(libMutex); 4596fcf3ce44SJohn Forte return (status); 4597fcf3ce44SJohn Forte } 4598fcf3ce44SJohn Forte 4599fcf3ce44SJohn Forte 4600fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetPnpStatistics( 4601fcf3ce44SJohn Forte IMA_OID pnpId, 4602fcf3ce44SJohn Forte IMA_PNP_STATISTICS *pStats) { 4603fcf3ce44SJohn Forte IMA_GetPnpStatisticsFn PassFunc; 4604fcf3ce44SJohn Forte IMA_UINT i; 4605fcf3ce44SJohn Forte IMA_STATUS status; 4606fcf3ce44SJohn Forte 4607fcf3ce44SJohn Forte if (number_of_plugins == -1) 4608fcf3ce44SJohn Forte InitLibrary(); 4609fcf3ce44SJohn Forte 4610fcf3ce44SJohn Forte if (pStats == NULL) 4611fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4612fcf3ce44SJohn Forte 4613fcf3ce44SJohn Forte if (pnpId.objectType != IMA_OBJECT_TYPE_PNP) 4614fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4615fcf3ce44SJohn Forte 4616fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4617fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4618fcf3ce44SJohn Forte 4619fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4620fcf3ce44SJohn Forte if (plugintable[i].ownerId == pnpId.ownerId) { 4621fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4622fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4623fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4624fcf3ce44SJohn Forte #ifdef WIN32 4625fcf3ce44SJohn Forte PassFunc = (IMA_GetPnpStatisticsFn) 4626fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4627fcf3ce44SJohn Forte "IMA_GetPnpStatistics"); 4628fcf3ce44SJohn Forte #else 4629fcf3ce44SJohn Forte PassFunc = (IMA_GetPnpStatisticsFn) 4630fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4631fcf3ce44SJohn Forte "IMA_GetPnpStatistics"); 4632fcf3ce44SJohn Forte #endif 4633fcf3ce44SJohn Forte 4634fcf3ce44SJohn Forte if (PassFunc != NULL) { 4635fcf3ce44SJohn Forte status = PassFunc(pnpId, pStats); 4636fcf3ce44SJohn Forte } 4637fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4638fcf3ce44SJohn Forte } 4639fcf3ce44SJohn Forte 4640fcf3ce44SJohn Forte break; 4641fcf3ce44SJohn Forte } 4642fcf3ce44SJohn Forte } 4643fcf3ce44SJohn Forte os_releasemutex(libMutex); 4644fcf3ce44SJohn Forte return (status); 4645fcf3ce44SJohn Forte } 4646fcf3ce44SJohn Forte 4647fcf3ce44SJohn Forte 4648fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetTargetProperties( 4649fcf3ce44SJohn Forte IMA_OID targetId, 4650fcf3ce44SJohn Forte IMA_TARGET_PROPERTIES *pProps) { 4651fcf3ce44SJohn Forte IMA_GetTargetPropertiesFn PassFunc; 4652fcf3ce44SJohn Forte IMA_UINT i; 4653fcf3ce44SJohn Forte IMA_STATUS status; 4654fcf3ce44SJohn Forte 4655fcf3ce44SJohn Forte if (number_of_plugins == -1) 4656fcf3ce44SJohn Forte InitLibrary(); 4657fcf3ce44SJohn Forte 4658fcf3ce44SJohn Forte if (pProps == NULL) 4659fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4660fcf3ce44SJohn Forte 4661fcf3ce44SJohn Forte if (targetId.objectType != IMA_OBJECT_TYPE_TARGET) 4662fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4663fcf3ce44SJohn Forte 4664fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4665fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4666fcf3ce44SJohn Forte 4667fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4668fcf3ce44SJohn Forte if (plugintable[i].ownerId == targetId.ownerId) { 4669fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4670fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4671fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4672fcf3ce44SJohn Forte #ifdef WIN32 4673fcf3ce44SJohn Forte PassFunc = (IMA_GetTargetPropertiesFn) 4674fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4675fcf3ce44SJohn Forte "IMA_GetTargetProperties"); 4676fcf3ce44SJohn Forte #else 4677fcf3ce44SJohn Forte PassFunc = (IMA_GetTargetPropertiesFn) 4678fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4679fcf3ce44SJohn Forte "IMA_GetTargetProperties"); 4680fcf3ce44SJohn Forte #endif 4681fcf3ce44SJohn Forte 4682fcf3ce44SJohn Forte if (PassFunc != NULL) { 4683fcf3ce44SJohn Forte status = PassFunc(targetId, pProps); 4684fcf3ce44SJohn Forte } 4685fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4686fcf3ce44SJohn Forte } 4687fcf3ce44SJohn Forte 4688fcf3ce44SJohn Forte break; 4689fcf3ce44SJohn Forte } 4690fcf3ce44SJohn Forte } 4691fcf3ce44SJohn Forte os_releasemutex(libMutex); 4692fcf3ce44SJohn Forte return (status); 4693fcf3ce44SJohn Forte } 4694fcf3ce44SJohn Forte 4695fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetSessionProperties( 4696fcf3ce44SJohn Forte IMA_OID sessionId, 4697fcf3ce44SJohn Forte IMA_SESSION_PROPERTIES *pProps) { 4698fcf3ce44SJohn Forte IMA_GetSessionPropertiesFn PassFunc; 4699fcf3ce44SJohn Forte IMA_UINT i; 4700fcf3ce44SJohn Forte IMA_STATUS status; 4701fcf3ce44SJohn Forte 4702fcf3ce44SJohn Forte if (number_of_plugins == -1) 4703fcf3ce44SJohn Forte InitLibrary(); 4704fcf3ce44SJohn Forte 4705fcf3ce44SJohn Forte if (pProps == NULL) 4706fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4707fcf3ce44SJohn Forte 4708fcf3ce44SJohn Forte if (sessionId.objectType != IMA_OBJECT_TYPE_SESSION) 4709fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4710fcf3ce44SJohn Forte 4711fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4712fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4713fcf3ce44SJohn Forte 4714fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4715fcf3ce44SJohn Forte if (plugintable[i].ownerId == sessionId.ownerId) { 4716fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4717fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4718fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4719fcf3ce44SJohn Forte #ifdef WIN32 4720fcf3ce44SJohn Forte PassFunc = (IMA_GetSessionPropertiesFn) 4721fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4722fcf3ce44SJohn Forte "IMA_GetSessionProperties"); 4723fcf3ce44SJohn Forte #else 4724fcf3ce44SJohn Forte PassFunc = (IMA_GetSessionPropertiesFn) 4725fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4726fcf3ce44SJohn Forte "IMA_GetSessionProperties"); 4727fcf3ce44SJohn Forte #endif 4728fcf3ce44SJohn Forte 4729fcf3ce44SJohn Forte if (PassFunc != NULL) { 4730fcf3ce44SJohn Forte status = PassFunc(sessionId, pProps); 4731fcf3ce44SJohn Forte } 4732fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4733fcf3ce44SJohn Forte } 4734fcf3ce44SJohn Forte 4735fcf3ce44SJohn Forte break; 4736fcf3ce44SJohn Forte } 4737fcf3ce44SJohn Forte } 4738fcf3ce44SJohn Forte os_releasemutex(libMutex); 4739fcf3ce44SJohn Forte return (status); 4740fcf3ce44SJohn Forte } 4741fcf3ce44SJohn Forte 4742fcf3ce44SJohn Forte 4743fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetConnectionProperties( 4744fcf3ce44SJohn Forte IMA_OID connectionId, 4745fcf3ce44SJohn Forte IMA_CONNECTION_PROPERTIES *pProps) { 4746fcf3ce44SJohn Forte IMA_GetConnectionPropertiesFn PassFunc; 4747fcf3ce44SJohn Forte IMA_UINT i; 4748fcf3ce44SJohn Forte IMA_STATUS status; 4749fcf3ce44SJohn Forte 4750fcf3ce44SJohn Forte if (number_of_plugins == -1) 4751fcf3ce44SJohn Forte InitLibrary(); 4752fcf3ce44SJohn Forte 4753fcf3ce44SJohn Forte if (pProps == NULL) 4754fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4755fcf3ce44SJohn Forte 4756fcf3ce44SJohn Forte if (connectionId.objectType != IMA_OBJECT_TYPE_CONNECTION) 4757fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4758fcf3ce44SJohn Forte 4759fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4760fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4761fcf3ce44SJohn Forte 4762fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4763fcf3ce44SJohn Forte if (plugintable[i].ownerId == connectionId.ownerId) { 4764fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4765fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4766fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4767fcf3ce44SJohn Forte #ifdef WIN32 4768fcf3ce44SJohn Forte PassFunc = (IMA_GetConnectionPropertiesFn) 4769fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4770fcf3ce44SJohn Forte "IMA_GetConnectionProperties"); 4771fcf3ce44SJohn Forte #else 4772fcf3ce44SJohn Forte PassFunc = (IMA_GetConnectionPropertiesFn) 4773fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4774fcf3ce44SJohn Forte "IMA_GetConnectionProperties"); 4775fcf3ce44SJohn Forte #endif 4776fcf3ce44SJohn Forte 4777fcf3ce44SJohn Forte if (PassFunc != NULL) { 4778fcf3ce44SJohn Forte status = PassFunc(connectionId, pProps); 4779fcf3ce44SJohn Forte } 4780fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4781fcf3ce44SJohn Forte } 4782fcf3ce44SJohn Forte 4783fcf3ce44SJohn Forte break; 4784fcf3ce44SJohn Forte } 4785fcf3ce44SJohn Forte } 4786fcf3ce44SJohn Forte os_releasemutex(libMutex); 4787fcf3ce44SJohn Forte return (status); 4788fcf3ce44SJohn Forte } 4789fcf3ce44SJohn Forte 4790fcf3ce44SJohn Forte 4791fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetTargetErrorStatistics( 4792fcf3ce44SJohn Forte IMA_OID targetId, 4793fcf3ce44SJohn Forte IMA_TARGET_ERROR_STATISTICS *pStats) { 4794fcf3ce44SJohn Forte IMA_GetTargetErrorStatisticsFn PassFunc; 4795fcf3ce44SJohn Forte IMA_UINT i; 4796fcf3ce44SJohn Forte IMA_STATUS status; 4797fcf3ce44SJohn Forte 4798fcf3ce44SJohn Forte if (number_of_plugins == -1) 4799fcf3ce44SJohn Forte InitLibrary(); 4800fcf3ce44SJohn Forte 4801fcf3ce44SJohn Forte if (pStats == NULL) 4802fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4803fcf3ce44SJohn Forte 4804fcf3ce44SJohn Forte if (targetId.objectType != IMA_OBJECT_TYPE_TARGET) 4805fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4806fcf3ce44SJohn Forte 4807fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4808fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4809fcf3ce44SJohn Forte 4810fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4811fcf3ce44SJohn Forte if (plugintable[i].ownerId == targetId.ownerId) { 4812fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4813fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4814fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4815fcf3ce44SJohn Forte #ifdef WIN32 4816fcf3ce44SJohn Forte PassFunc = (IMA_GetTargetErrorStatisticsFn) 4817fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4818fcf3ce44SJohn Forte "IMA_GetTargetErrorStatistics"); 4819fcf3ce44SJohn Forte #else 4820fcf3ce44SJohn Forte PassFunc = (IMA_GetTargetErrorStatisticsFn) 4821fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4822fcf3ce44SJohn Forte "IMA_GetTargetErrorStatistics"); 4823fcf3ce44SJohn Forte #endif 4824fcf3ce44SJohn Forte 4825fcf3ce44SJohn Forte if (PassFunc != NULL) { 4826fcf3ce44SJohn Forte status = PassFunc(targetId, pStats); 4827fcf3ce44SJohn Forte } 4828fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4829fcf3ce44SJohn Forte } 4830fcf3ce44SJohn Forte 4831fcf3ce44SJohn Forte break; 4832fcf3ce44SJohn Forte } 4833fcf3ce44SJohn Forte } 4834fcf3ce44SJohn Forte os_releasemutex(libMutex); 4835fcf3ce44SJohn Forte return (status); 4836fcf3ce44SJohn Forte } 4837fcf3ce44SJohn Forte 4838fcf3ce44SJohn Forte 4839fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetLuOidList( 4840fcf3ce44SJohn Forte IMA_OID Oid, 4841fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 4842fcf3ce44SJohn Forte IMA_GetLuOidListFn PassFunc; 4843fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 4844fcf3ce44SJohn Forte IMA_UINT i; 4845fcf3ce44SJohn Forte IMA_STATUS status; 4846fcf3ce44SJohn Forte 4847fcf3ce44SJohn Forte if (number_of_plugins == -1) 4848fcf3ce44SJohn Forte InitLibrary(); 4849fcf3ce44SJohn Forte 4850fcf3ce44SJohn Forte if (ppList == NULL) 4851fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4852fcf3ce44SJohn Forte 4853fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_LHBA && 4854fcf3ce44SJohn Forte Oid.objectType != IMA_OBJECT_TYPE_TARGET) 4855fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4856fcf3ce44SJohn Forte 4857fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4858fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4859fcf3ce44SJohn Forte 4860fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4861fcf3ce44SJohn Forte 4862fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 4863fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4864fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4865fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 4866fcf3ce44SJohn Forte #ifdef WIN32 4867fcf3ce44SJohn Forte PassFunc = (IMA_GetLuOidListFn) 4868fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 4869fcf3ce44SJohn Forte "IMA_GetLuOidList"); 4870fcf3ce44SJohn Forte #else 4871fcf3ce44SJohn Forte PassFunc = (IMA_GetLuOidListFn) 4872fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4873fcf3ce44SJohn Forte "IMA_GetLuOidList"); 4874fcf3ce44SJohn Forte #endif 4875fcf3ce44SJohn Forte 4876fcf3ce44SJohn Forte if (PassFunc != NULL) { 4877fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 4878fcf3ce44SJohn Forte 4879fcf3ce44SJohn Forte status = PassFunc(Oid, &ppOidList); 4880fcf3ce44SJohn Forte if (IMA_SUCCESS(status)) { 4881fcf3ce44SJohn Forte IMA_UINT listSize; 4882fcf3ce44SJohn Forte listSize = 4883fcf3ce44SJohn Forte sizeof (IMA_OID_LIST); 4884fcf3ce44SJohn Forte *ppList = (IMA_OID_LIST*) 4885fcf3ce44SJohn Forte calloc(1, listSize + 4886fcf3ce44SJohn Forte (ppOidList->oidCount - 1)* 4887fcf3ce44SJohn Forte sizeof (IMA_OID)); 4888fcf3ce44SJohn Forte 4889fcf3ce44SJohn Forte if ((*ppList) == NULL) { 4890fcf3ce44SJohn Forte status = EUOS_ERROR; 4891fcf3ce44SJohn Forte } 4892fcf3ce44SJohn Forte else 4893fcf3ce44SJohn Forte memcpy((*ppList), 4894fcf3ce44SJohn Forte ppOidList, 4895fcf3ce44SJohn Forte listSize + 4896fcf3ce44SJohn Forte (ppOidList-> 4897fcf3ce44SJohn Forte oidCount - 1)* 4898fcf3ce44SJohn Forte sizeof (IMA_OID)); 4899fcf3ce44SJohn Forte #ifdef WIN32 4900fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 4901fcf3ce44SJohn Forte GetProcAddress( 4902fcf3ce44SJohn Forte plugintable[i].hPlugin, 4903fcf3ce44SJohn Forte "IMA_FreeMemory"); 4904fcf3ce44SJohn Forte #else 4905fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 4906fcf3ce44SJohn Forte dlsym( 4907fcf3ce44SJohn Forte plugintable[i].hPlugin, 4908fcf3ce44SJohn Forte "IMA_FreeMemory"); 4909fcf3ce44SJohn Forte #endif 4910fcf3ce44SJohn Forte if (FreeFunc != NULL) { 4911fcf3ce44SJohn Forte FreeFunc(ppOidList); 4912fcf3ce44SJohn Forte } 4913fcf3ce44SJohn Forte } 4914fcf3ce44SJohn Forte } 4915fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4916fcf3ce44SJohn Forte } 4917fcf3ce44SJohn Forte 4918fcf3ce44SJohn Forte break; 4919fcf3ce44SJohn Forte } 4920fcf3ce44SJohn Forte } 4921fcf3ce44SJohn Forte os_releasemutex(libMutex); 4922fcf3ce44SJohn Forte return (status); 4923fcf3ce44SJohn Forte } 4924fcf3ce44SJohn Forte 4925fcf3ce44SJohn Forte 4926fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetLuOid( 4927fcf3ce44SJohn Forte IMA_OID targetId, 4928fcf3ce44SJohn Forte IMA_UINT64 lun, 4929fcf3ce44SJohn Forte IMA_OID *pluId) { 4930fcf3ce44SJohn Forte IMA_GetLuOidFn PassFunc; 4931fcf3ce44SJohn Forte IMA_UINT i; 4932fcf3ce44SJohn Forte IMA_STATUS status; 4933fcf3ce44SJohn Forte 4934fcf3ce44SJohn Forte if (number_of_plugins == -1) 4935fcf3ce44SJohn Forte InitLibrary(); 4936fcf3ce44SJohn Forte 4937fcf3ce44SJohn Forte if (pluId == NULL) 4938fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4939fcf3ce44SJohn Forte 4940fcf3ce44SJohn Forte 4941fcf3ce44SJohn Forte if (targetId.objectType != IMA_OBJECT_TYPE_TARGET) 4942fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4943fcf3ce44SJohn Forte 4944fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4945fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4946fcf3ce44SJohn Forte 4947fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4948fcf3ce44SJohn Forte if (plugintable[i].ownerId == targetId.ownerId) { 4949fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 4950fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 4951fcf3ce44SJohn Forte os_obtainmutex( 4952fcf3ce44SJohn Forte plugintable[i].pluginMutex); 4953fcf3ce44SJohn Forte #ifdef WIN32 4954fcf3ce44SJohn Forte PassFunc = (IMA_GetLuOidFn) 4955fcf3ce44SJohn Forte GetProcAddress( 4956fcf3ce44SJohn Forte plugintable[i].hPlugin, 4957fcf3ce44SJohn Forte "IMA_GetLuOid"); 4958fcf3ce44SJohn Forte #else 4959fcf3ce44SJohn Forte PassFunc = (IMA_GetLuOidFn) 4960fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 4961fcf3ce44SJohn Forte "IMA_GetLuOid"); 4962fcf3ce44SJohn Forte #endif 4963fcf3ce44SJohn Forte 4964fcf3ce44SJohn Forte if (PassFunc != NULL) { 4965fcf3ce44SJohn Forte status = 4966fcf3ce44SJohn Forte PassFunc(targetId, lun, pluId); 4967fcf3ce44SJohn Forte } 4968fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 4969fcf3ce44SJohn Forte } 4970fcf3ce44SJohn Forte 4971fcf3ce44SJohn Forte break; 4972fcf3ce44SJohn Forte } 4973fcf3ce44SJohn Forte } 4974fcf3ce44SJohn Forte os_releasemutex(libMutex); 4975fcf3ce44SJohn Forte return (status); 4976fcf3ce44SJohn Forte } 4977fcf3ce44SJohn Forte 4978fcf3ce44SJohn Forte 4979fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetLuProperties( 4980fcf3ce44SJohn Forte IMA_OID luId, 4981fcf3ce44SJohn Forte IMA_LU_PROPERTIES *pProps) { 4982fcf3ce44SJohn Forte IMA_GetLuPropertiesFn PassFunc; 4983fcf3ce44SJohn Forte IMA_UINT i; 4984fcf3ce44SJohn Forte IMA_STATUS status; 4985fcf3ce44SJohn Forte 4986fcf3ce44SJohn Forte if (number_of_plugins == -1) 4987fcf3ce44SJohn Forte InitLibrary(); 4988fcf3ce44SJohn Forte 4989fcf3ce44SJohn Forte if (pProps == NULL) 4990fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 4991fcf3ce44SJohn Forte 4992fcf3ce44SJohn Forte if (luId.objectType != IMA_OBJECT_TYPE_LU) 4993fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 4994fcf3ce44SJohn Forte 4995fcf3ce44SJohn Forte os_obtainmutex(libMutex); 4996fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 4997fcf3ce44SJohn Forte 4998fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 4999fcf3ce44SJohn Forte if (plugintable[i].ownerId == luId.ownerId) { 5000fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5001fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5002fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5003fcf3ce44SJohn Forte #ifdef WIN32 5004fcf3ce44SJohn Forte PassFunc = (IMA_GetLuPropertiesFn) 5005fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5006fcf3ce44SJohn Forte "IMA_GetLuProperties"); 5007fcf3ce44SJohn Forte #else 5008fcf3ce44SJohn Forte PassFunc = (IMA_GetLuPropertiesFn) 5009fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5010fcf3ce44SJohn Forte "IMA_GetLuProperties"); 5011fcf3ce44SJohn Forte #endif 5012fcf3ce44SJohn Forte 5013fcf3ce44SJohn Forte if (PassFunc != NULL) { 5014fcf3ce44SJohn Forte status = PassFunc(luId, pProps); 5015fcf3ce44SJohn Forte } 5016fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5017fcf3ce44SJohn Forte } 5018fcf3ce44SJohn Forte 5019fcf3ce44SJohn Forte break; 5020fcf3ce44SJohn Forte } 5021fcf3ce44SJohn Forte } 5022fcf3ce44SJohn Forte os_releasemutex(libMutex); 5023fcf3ce44SJohn Forte return (status); 5024fcf3ce44SJohn Forte } 5025fcf3ce44SJohn Forte 5026fcf3ce44SJohn Forte 5027fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetStatisticsProperties( 5028fcf3ce44SJohn Forte IMA_OID oid, 5029fcf3ce44SJohn Forte IMA_STATISTICS_PROPERTIES *pProps) { 5030fcf3ce44SJohn Forte IMA_GetStatisticsPropertiesFn PassFunc; 5031fcf3ce44SJohn Forte IMA_UINT i; 5032fcf3ce44SJohn Forte IMA_STATUS status; 5033fcf3ce44SJohn Forte 5034fcf3ce44SJohn Forte if (number_of_plugins == -1) 5035fcf3ce44SJohn Forte InitLibrary(); 5036fcf3ce44SJohn Forte 5037fcf3ce44SJohn Forte if (pProps == NULL) 5038fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5039fcf3ce44SJohn Forte 5040fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_TARGET && 5041fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_LU && 5042fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_PNP) 5043fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5044fcf3ce44SJohn Forte 5045fcf3ce44SJohn Forte 5046fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5047fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5048fcf3ce44SJohn Forte 5049fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5050fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 5051fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5052fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5053fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5054fcf3ce44SJohn Forte #ifdef WIN32 5055fcf3ce44SJohn Forte PassFunc = 5056fcf3ce44SJohn Forte (IMA_GetStatisticsPropertiesFn) 5057fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5058fcf3ce44SJohn Forte "IMA_GetStatisticsProperties"); 5059fcf3ce44SJohn Forte #else 5060fcf3ce44SJohn Forte PassFunc = 5061fcf3ce44SJohn Forte (IMA_GetStatisticsPropertiesFn) 5062fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5063fcf3ce44SJohn Forte "IMA_GetStatisticsProperties"); 5064fcf3ce44SJohn Forte #endif 5065fcf3ce44SJohn Forte 5066fcf3ce44SJohn Forte if (PassFunc != NULL) { 5067fcf3ce44SJohn Forte status = PassFunc(oid, pProps); 5068fcf3ce44SJohn Forte } 5069fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5070fcf3ce44SJohn Forte } 5071fcf3ce44SJohn Forte 5072fcf3ce44SJohn Forte break; 5073fcf3ce44SJohn Forte } 5074fcf3ce44SJohn Forte } 5075fcf3ce44SJohn Forte os_releasemutex(libMutex); 5076fcf3ce44SJohn Forte return (status); 5077fcf3ce44SJohn Forte } 5078fcf3ce44SJohn Forte 5079fcf3ce44SJohn Forte 5080fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetDeviceStatistics( 5081fcf3ce44SJohn Forte IMA_OID oid, 5082fcf3ce44SJohn Forte IMA_DEVICE_STATISTICS *pStats) { 5083fcf3ce44SJohn Forte IMA_GetDeviceStatisticsFn PassFunc; 5084fcf3ce44SJohn Forte IMA_UINT i; 5085fcf3ce44SJohn Forte IMA_STATUS status; 5086fcf3ce44SJohn Forte 5087fcf3ce44SJohn Forte if (number_of_plugins == -1) 5088fcf3ce44SJohn Forte InitLibrary(); 5089fcf3ce44SJohn Forte 5090fcf3ce44SJohn Forte if (pStats == NULL) 5091fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5092fcf3ce44SJohn Forte 5093fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_LU && 5094fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_TARGET) 5095fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5096fcf3ce44SJohn Forte 5097fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5098fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5099fcf3ce44SJohn Forte 5100fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5101fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 5102fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5103fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5104fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5105fcf3ce44SJohn Forte #ifdef WIN32 5106fcf3ce44SJohn Forte PassFunc = 5107fcf3ce44SJohn Forte (IMA_GetDeviceStatisticsFn) 5108fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5109fcf3ce44SJohn Forte "IMA_GetDeviceStatistics"); 5110fcf3ce44SJohn Forte #else 5111fcf3ce44SJohn Forte PassFunc = 5112fcf3ce44SJohn Forte (IMA_GetDeviceStatisticsFn) 5113fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5114fcf3ce44SJohn Forte "IMA_GetDeviceStatistics"); 5115fcf3ce44SJohn Forte #endif 5116fcf3ce44SJohn Forte 5117fcf3ce44SJohn Forte if (PassFunc != NULL) { 5118fcf3ce44SJohn Forte status = PassFunc(oid, pStats); 5119fcf3ce44SJohn Forte } 5120fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5121fcf3ce44SJohn Forte } 5122fcf3ce44SJohn Forte 5123fcf3ce44SJohn Forte break; 5124fcf3ce44SJohn Forte } 5125fcf3ce44SJohn Forte } 5126fcf3ce44SJohn Forte os_releasemutex(libMutex); 5127fcf3ce44SJohn Forte return (status); 5128fcf3ce44SJohn Forte } 5129fcf3ce44SJohn Forte 5130fcf3ce44SJohn Forte 5131fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_LuInquiry( 5132fcf3ce44SJohn Forte IMA_OID deviceId, 5133fcf3ce44SJohn Forte IMA_BOOL evpd, 5134fcf3ce44SJohn Forte IMA_BOOL cmddt, 5135fcf3ce44SJohn Forte IMA_BYTE pageCode, 5136fcf3ce44SJohn Forte 5137fcf3ce44SJohn Forte IMA_BYTE *pOutputBuffer, 5138fcf3ce44SJohn Forte IMA_UINT *pOutputBufferLength, 5139fcf3ce44SJohn Forte 5140fcf3ce44SJohn Forte IMA_BYTE *pSenseBuffer, 5141fcf3ce44SJohn Forte IMA_UINT *pSenseBufferLength) { 5142fcf3ce44SJohn Forte IMA_LuInquiryFn PassFunc; 5143fcf3ce44SJohn Forte IMA_UINT i; 5144fcf3ce44SJohn Forte IMA_STATUS status; 5145fcf3ce44SJohn Forte 5146fcf3ce44SJohn Forte if (number_of_plugins == -1) 5147fcf3ce44SJohn Forte InitLibrary(); 5148fcf3ce44SJohn Forte 5149fcf3ce44SJohn Forte if (pOutputBuffer == NULL || pOutputBufferLength == NULL || 5150fcf3ce44SJohn Forte *pOutputBufferLength == 0 || 5151146832dbSMilos Muzik (pSenseBuffer == NULL && pSenseBufferLength != NULL && 5152146832dbSMilos Muzik *pSenseBufferLength != 0)) 5153fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5154fcf3ce44SJohn Forte 5155fcf3ce44SJohn Forte if ((evpd != IMA_TRUE && evpd != IMA_FALSE) || 5156fcf3ce44SJohn Forte (cmddt != IMA_TRUE && cmddt != IMA_FALSE)) 5157fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5158fcf3ce44SJohn Forte 5159fcf3ce44SJohn Forte if (deviceId.objectType != IMA_OBJECT_TYPE_TARGET && 5160fcf3ce44SJohn Forte deviceId.objectType != IMA_OBJECT_TYPE_LU) 5161fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5162fcf3ce44SJohn Forte 5163fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5164fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5165fcf3ce44SJohn Forte 5166fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5167fcf3ce44SJohn Forte if (plugintable[i].ownerId == deviceId.ownerId) { 5168fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5169fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5170fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5171fcf3ce44SJohn Forte #ifdef WIN32 5172fcf3ce44SJohn Forte PassFunc = (IMA_LuInquiryFn) 5173fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5174fcf3ce44SJohn Forte "IMA_LuInquiry"); 5175fcf3ce44SJohn Forte #else 5176fcf3ce44SJohn Forte PassFunc = (IMA_LuInquiryFn) 5177fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5178fcf3ce44SJohn Forte "IMA_LuInquiry"); 5179fcf3ce44SJohn Forte #endif 5180fcf3ce44SJohn Forte 5181fcf3ce44SJohn Forte if (PassFunc != NULL) { 5182fcf3ce44SJohn Forte status = 5183fcf3ce44SJohn Forte PassFunc(deviceId, evpd, 5184fcf3ce44SJohn Forte cmddt, pageCode, 5185fcf3ce44SJohn Forte pOutputBuffer, pOutputBufferLength, 5186fcf3ce44SJohn Forte pSenseBuffer, pSenseBufferLength); 5187fcf3ce44SJohn Forte } 5188fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5189fcf3ce44SJohn Forte } 5190fcf3ce44SJohn Forte 5191fcf3ce44SJohn Forte break; 5192fcf3ce44SJohn Forte } 5193fcf3ce44SJohn Forte } 5194fcf3ce44SJohn Forte os_releasemutex(libMutex); 5195fcf3ce44SJohn Forte return (status); 5196fcf3ce44SJohn Forte } 5197fcf3ce44SJohn Forte 5198fcf3ce44SJohn Forte 5199fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_LuReadCapacity( 5200fcf3ce44SJohn Forte IMA_OID deviceId, 5201fcf3ce44SJohn Forte IMA_UINT cdbLength, 5202fcf3ce44SJohn Forte IMA_BYTE *pOutputBuffer, 5203fcf3ce44SJohn Forte IMA_UINT *pOutputBufferLength, 5204fcf3ce44SJohn Forte 5205fcf3ce44SJohn Forte IMA_BYTE *pSenseBuffer, 5206fcf3ce44SJohn Forte IMA_UINT *pSenseBufferLength) { 5207fcf3ce44SJohn Forte IMA_LuReadCapacityFn PassFunc; 5208fcf3ce44SJohn Forte IMA_UINT i; 5209fcf3ce44SJohn Forte IMA_STATUS status; 5210fcf3ce44SJohn Forte 5211fcf3ce44SJohn Forte if (number_of_plugins == -1) 5212fcf3ce44SJohn Forte InitLibrary(); 5213fcf3ce44SJohn Forte 5214fcf3ce44SJohn Forte if (cdbLength != 10 && cdbLength != 16) 5215fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5216fcf3ce44SJohn Forte 5217fcf3ce44SJohn Forte if ((pOutputBuffer == NULL || pOutputBufferLength == NULL || 5218fcf3ce44SJohn Forte *pOutputBufferLength == 0) || 5219fcf3ce44SJohn Forte (pSenseBuffer == NULL && pSenseBufferLength != NULL && 5220fcf3ce44SJohn Forte *pSenseBufferLength != 0)) 5221fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5222fcf3ce44SJohn Forte 5223fcf3ce44SJohn Forte if (deviceId.objectType != IMA_OBJECT_TYPE_TARGET && 5224fcf3ce44SJohn Forte deviceId.objectType != IMA_OBJECT_TYPE_LU) 5225fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5226fcf3ce44SJohn Forte 5227fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5228fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5229fcf3ce44SJohn Forte 5230fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5231fcf3ce44SJohn Forte if (plugintable[i].ownerId == deviceId.ownerId) { 5232fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5233fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5234fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5235fcf3ce44SJohn Forte #ifdef WIN32 5236fcf3ce44SJohn Forte PassFunc = (IMA_LuReadCapacityFn) 5237fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5238fcf3ce44SJohn Forte "IMA_LuReadCapacity"); 5239fcf3ce44SJohn Forte #else 5240fcf3ce44SJohn Forte PassFunc = (IMA_LuReadCapacityFn) 5241fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5242fcf3ce44SJohn Forte "IMA_LuReadCapacity"); 5243fcf3ce44SJohn Forte #endif 5244fcf3ce44SJohn Forte 5245fcf3ce44SJohn Forte if (PassFunc != NULL) { 5246fcf3ce44SJohn Forte status = PassFunc(deviceId, cdbLength, 5247fcf3ce44SJohn Forte pOutputBuffer, pOutputBufferLength, 5248fcf3ce44SJohn Forte pSenseBuffer, pSenseBufferLength); 5249fcf3ce44SJohn Forte } 5250fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5251fcf3ce44SJohn Forte } 5252fcf3ce44SJohn Forte 5253fcf3ce44SJohn Forte break; 5254fcf3ce44SJohn Forte } 5255fcf3ce44SJohn Forte } 5256fcf3ce44SJohn Forte os_releasemutex(libMutex); 5257fcf3ce44SJohn Forte return (status); 5258fcf3ce44SJohn Forte } 5259fcf3ce44SJohn Forte 5260fcf3ce44SJohn Forte 5261fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_LuReportLuns( 5262fcf3ce44SJohn Forte IMA_OID deviceId, 5263fcf3ce44SJohn Forte IMA_BOOL sendToWellKnownLun, 5264fcf3ce44SJohn Forte IMA_BYTE selectReport, 5265fcf3ce44SJohn Forte 5266fcf3ce44SJohn Forte IMA_BYTE *pOutputBuffer, 5267fcf3ce44SJohn Forte IMA_UINT *pOutputBufferLength, 5268fcf3ce44SJohn Forte 5269fcf3ce44SJohn Forte IMA_BYTE *pSenseBuffer, 5270fcf3ce44SJohn Forte IMA_UINT *pSenseBufferLength) { 5271fcf3ce44SJohn Forte IMA_LuReportLunsFn PassFunc; 5272fcf3ce44SJohn Forte IMA_UINT i; 5273fcf3ce44SJohn Forte IMA_STATUS status; 5274fcf3ce44SJohn Forte 5275fcf3ce44SJohn Forte if (number_of_plugins == -1) 5276fcf3ce44SJohn Forte InitLibrary(); 5277fcf3ce44SJohn Forte 5278fcf3ce44SJohn Forte if ((pOutputBuffer == NULL || pOutputBufferLength == NULL || 5279fcf3ce44SJohn Forte *pOutputBufferLength == 0) || 5280fcf3ce44SJohn Forte (pSenseBuffer == NULL && pSenseBufferLength != NULL && 5281fcf3ce44SJohn Forte *pSenseBufferLength != 0)) 5282fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5283fcf3ce44SJohn Forte 5284fcf3ce44SJohn Forte if (sendToWellKnownLun != IMA_TRUE && sendToWellKnownLun != IMA_FALSE) 5285fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5286fcf3ce44SJohn Forte 5287fcf3ce44SJohn Forte if (deviceId.objectType != IMA_OBJECT_TYPE_TARGET && 5288fcf3ce44SJohn Forte deviceId.objectType != IMA_OBJECT_TYPE_LU) 5289fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5290fcf3ce44SJohn Forte 5291fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5292fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5293fcf3ce44SJohn Forte 5294fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5295fcf3ce44SJohn Forte if (plugintable[i].ownerId == deviceId.ownerId) { 5296fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5297fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5298fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5299fcf3ce44SJohn Forte #ifdef WIN32 5300fcf3ce44SJohn Forte PassFunc = (IMA_LuReportLunsFn) 5301fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5302fcf3ce44SJohn Forte "IMA_LuReportLuns"); 5303fcf3ce44SJohn Forte #else 5304fcf3ce44SJohn Forte PassFunc = (IMA_LuReportLunsFn) 5305fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5306fcf3ce44SJohn Forte "IMA_LuReportLuns"); 5307fcf3ce44SJohn Forte #endif 5308fcf3ce44SJohn Forte 5309fcf3ce44SJohn Forte if (PassFunc != NULL) { 5310fcf3ce44SJohn Forte status = PassFunc(deviceId, 5311fcf3ce44SJohn Forte sendToWellKnownLun, selectReport, 5312fcf3ce44SJohn Forte pOutputBuffer, pOutputBufferLength, 5313fcf3ce44SJohn Forte pSenseBuffer, pSenseBufferLength); 5314fcf3ce44SJohn Forte } 5315fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5316fcf3ce44SJohn Forte } 5317fcf3ce44SJohn Forte 5318fcf3ce44SJohn Forte break; 5319fcf3ce44SJohn Forte } 5320fcf3ce44SJohn Forte } 5321fcf3ce44SJohn Forte os_releasemutex(libMutex); 5322fcf3ce44SJohn Forte return (status); 5323fcf3ce44SJohn Forte } 5324fcf3ce44SJohn Forte 5325fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_ExposeLu( 5326fcf3ce44SJohn Forte IMA_OID luId) { 5327fcf3ce44SJohn Forte IMA_ExposeLuFn PassFunc; 5328fcf3ce44SJohn Forte IMA_UINT i; 5329fcf3ce44SJohn Forte IMA_STATUS status; 5330fcf3ce44SJohn Forte 5331fcf3ce44SJohn Forte if (number_of_plugins == -1) 5332fcf3ce44SJohn Forte InitLibrary(); 5333fcf3ce44SJohn Forte 5334fcf3ce44SJohn Forte if (luId.objectType != IMA_OBJECT_TYPE_LU) 5335fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_OBJECT_TYPE); 5336fcf3ce44SJohn Forte 5337fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5338fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5339fcf3ce44SJohn Forte 5340fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5341fcf3ce44SJohn Forte if (plugintable[i].ownerId == luId.ownerId) { 5342fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5343fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5344fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5345fcf3ce44SJohn Forte #ifdef WIN32 5346fcf3ce44SJohn Forte PassFunc = (IMA_ExposeLuFn) 5347fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5348fcf3ce44SJohn Forte "IMA_ExposeLu"); 5349fcf3ce44SJohn Forte 5350fcf3ce44SJohn Forte #else 5351fcf3ce44SJohn Forte PassFunc = (IMA_ExposeLuFn) 5352fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5353fcf3ce44SJohn Forte "IMA_ExposeLu"); 5354fcf3ce44SJohn Forte #endif 5355fcf3ce44SJohn Forte 5356fcf3ce44SJohn Forte if (PassFunc != NULL) { 5357fcf3ce44SJohn Forte status = PassFunc(luId); 5358fcf3ce44SJohn Forte } 5359fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5360fcf3ce44SJohn Forte } 5361fcf3ce44SJohn Forte 5362fcf3ce44SJohn Forte break; 5363fcf3ce44SJohn Forte } 5364fcf3ce44SJohn Forte } 5365fcf3ce44SJohn Forte os_releasemutex(libMutex); 5366fcf3ce44SJohn Forte return (status); 5367fcf3ce44SJohn Forte } 5368fcf3ce44SJohn Forte 5369fcf3ce44SJohn Forte 5370fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_UnexposeLu( 5371fcf3ce44SJohn Forte IMA_OID luId) { 5372fcf3ce44SJohn Forte IMA_UnexposeLuFn PassFunc; 5373fcf3ce44SJohn Forte IMA_UINT i; 5374fcf3ce44SJohn Forte IMA_STATUS status; 5375fcf3ce44SJohn Forte 5376fcf3ce44SJohn Forte if (number_of_plugins == -1) 5377fcf3ce44SJohn Forte InitLibrary(); 5378fcf3ce44SJohn Forte 5379fcf3ce44SJohn Forte if (luId.objectType != IMA_OBJECT_TYPE_LU) 5380fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5381fcf3ce44SJohn Forte 5382fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5383fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5384fcf3ce44SJohn Forte 5385fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5386fcf3ce44SJohn Forte if (plugintable[i].ownerId == luId.ownerId) { 5387fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5388fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5389fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5390fcf3ce44SJohn Forte #ifdef WIN32 5391fcf3ce44SJohn Forte PassFunc = (IMA_UnexposeLuFn) 5392fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5393fcf3ce44SJohn Forte "IMA_UnexposeLu"); 5394fcf3ce44SJohn Forte #else 5395fcf3ce44SJohn Forte PassFunc = (IMA_UnexposeLuFn) 5396fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5397fcf3ce44SJohn Forte "IMA_UnexposeLu"); 5398fcf3ce44SJohn Forte #endif 5399fcf3ce44SJohn Forte 5400fcf3ce44SJohn Forte if (PassFunc != NULL) { 5401fcf3ce44SJohn Forte status = PassFunc(luId); 5402fcf3ce44SJohn Forte } 5403fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5404fcf3ce44SJohn Forte } 5405fcf3ce44SJohn Forte 5406fcf3ce44SJohn Forte break; 5407fcf3ce44SJohn Forte } 5408fcf3ce44SJohn Forte } 5409fcf3ce44SJohn Forte os_releasemutex(libMutex); 5410fcf3ce44SJohn Forte return (status); 5411fcf3ce44SJohn Forte } 5412fcf3ce44SJohn Forte 5413fcf3ce44SJohn Forte 5414fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetPhbaStatus( 5415fcf3ce44SJohn Forte IMA_OID hbaId, 5416fcf3ce44SJohn Forte IMA_PHBA_STATUS *pStatus) { 5417fcf3ce44SJohn Forte IMA_GetPhbaStatusFn PassFunc; 5418fcf3ce44SJohn Forte IMA_UINT i; 5419fcf3ce44SJohn Forte IMA_STATUS status; 5420fcf3ce44SJohn Forte 5421fcf3ce44SJohn Forte if (number_of_plugins == -1) 5422fcf3ce44SJohn Forte InitLibrary(); 5423fcf3ce44SJohn Forte 5424fcf3ce44SJohn Forte if (pStatus == NULL) 5425fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5426fcf3ce44SJohn Forte 5427fcf3ce44SJohn Forte if (hbaId.objectType != IMA_OBJECT_TYPE_PHBA) 5428fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5429fcf3ce44SJohn Forte 5430fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5431fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5432fcf3ce44SJohn Forte 5433fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5434fcf3ce44SJohn Forte if (plugintable[i].ownerId == hbaId.ownerId) { 5435fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5436fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5437fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5438fcf3ce44SJohn Forte #ifdef WIN32 5439fcf3ce44SJohn Forte PassFunc = (IMA_GetPhbaStatusFn) 5440fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5441fcf3ce44SJohn Forte "IMA_GetPhbaStatus"); 5442fcf3ce44SJohn Forte #else 5443fcf3ce44SJohn Forte PassFunc = (IMA_GetPhbaStatusFn) 5444fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5445fcf3ce44SJohn Forte "IMA_GetPhbaStatus"); 5446fcf3ce44SJohn Forte #endif 5447fcf3ce44SJohn Forte 5448fcf3ce44SJohn Forte if (PassFunc != NULL) { 5449fcf3ce44SJohn Forte status = PassFunc(hbaId, pStatus); 5450fcf3ce44SJohn Forte } 5451fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5452fcf3ce44SJohn Forte } 5453fcf3ce44SJohn Forte 5454fcf3ce44SJohn Forte break; 5455fcf3ce44SJohn Forte } 5456fcf3ce44SJohn Forte } 5457fcf3ce44SJohn Forte os_releasemutex(libMutex); 5458fcf3ce44SJohn Forte return (status); 5459fcf3ce44SJohn Forte } 5460fcf3ce44SJohn Forte 5461fcf3ce44SJohn Forte 5462fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_RegisterForObjectVisibilityChanges( 5463fcf3ce44SJohn Forte IMA_OBJECT_VISIBILITY_FN pClientFn) { 5464fcf3ce44SJohn Forte IMA_RegisterForObjectVisibilityChangesFn PassFunc; 5465fcf3ce44SJohn Forte IMA_UINT i; 5466fcf3ce44SJohn Forte IMA_UINT j; 5467fcf3ce44SJohn Forte IMA_STATUS status; 5468fcf3ce44SJohn Forte 5469fcf3ce44SJohn Forte if (number_of_plugins == -1) 5470fcf3ce44SJohn Forte InitLibrary(); 5471fcf3ce44SJohn Forte 5472fcf3ce44SJohn Forte if (pClientFn == NULL) 5473fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5474fcf3ce44SJohn Forte 5475fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5476fcf3ce44SJohn Forte 5477fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 5478fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5479fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5480fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5481fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5482fcf3ce44SJohn Forte if (plugintable[i].number_of_vbcallbacks >= 5483fcf3ce44SJohn Forte IMA_MAX_CALLBACK_PER_PLUGIN) { 5484fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5485fcf3ce44SJohn Forte continue; 5486fcf3ce44SJohn Forte } 5487fcf3ce44SJohn Forte 5488fcf3ce44SJohn Forte /* check if registered already */ 5489fcf3ce44SJohn Forte for (j = 0; 5490fcf3ce44SJohn Forte j < plugintable[i].number_of_vbcallbacks; j++) { 5491fcf3ce44SJohn Forte if (plugintable[i].vbcallback[j] == pClientFn) { 5492fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 5493fcf3ce44SJohn Forte break; 5494fcf3ce44SJohn Forte } 5495fcf3ce44SJohn Forte } 5496fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 5497fcf3ce44SJohn Forte 5498fcf3ce44SJohn Forte #ifdef WIN32 5499fcf3ce44SJohn Forte PassFunc = 5500fcf3ce44SJohn Forte (IMA_RegisterForObjectVisibilityChangesFn) 5501fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5502fcf3ce44SJohn Forte "IMA_RegisterForObjectVisibilityChanges"); 5503fcf3ce44SJohn Forte #else 5504fcf3ce44SJohn Forte PassFunc = 5505fcf3ce44SJohn Forte (IMA_RegisterForObjectVisibilityChangesFn) 5506fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5507fcf3ce44SJohn Forte "IMA_RegisterForObjectVisibilityChanges"); 5508fcf3ce44SJohn Forte #endif 5509fcf3ce44SJohn Forte 5510fcf3ce44SJohn Forte if (PassFunc != NULL) { 5511fcf3ce44SJohn Forte status = PassFunc(VisibilityCallback); 5512fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 5513fcf3ce44SJohn Forte j = plugintable[i]. 5514fcf3ce44SJohn Forte number_of_vbcallbacks; 5515fcf3ce44SJohn Forte plugintable[i].vbcallback[j] = 5516fcf3ce44SJohn Forte pClientFn; 5517fcf3ce44SJohn Forte plugintable[i]. 5518fcf3ce44SJohn Forte number_of_vbcallbacks++; 5519fcf3ce44SJohn Forte } 5520fcf3ce44SJohn Forte 5521fcf3ce44SJohn Forte } 5522fcf3ce44SJohn Forte } 5523fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5524fcf3ce44SJohn Forte } 5525fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) 5526fcf3ce44SJohn Forte break; 5527fcf3ce44SJohn Forte 5528fcf3ce44SJohn Forte } 5529fcf3ce44SJohn Forte os_releasemutex(libMutex); 5530fcf3ce44SJohn Forte return (status); 5531fcf3ce44SJohn Forte 5532fcf3ce44SJohn Forte } 5533fcf3ce44SJohn Forte 5534fcf3ce44SJohn Forte 5535fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_DeregisterForObjectVisibilityChanges( 5536fcf3ce44SJohn Forte IMA_OBJECT_VISIBILITY_FN pClientFn) { 5537fcf3ce44SJohn Forte IMA_DeregisterForObjectVisibilityChangesFn PassFunc; 5538fcf3ce44SJohn Forte IMA_UINT i; 5539fcf3ce44SJohn Forte IMA_UINT j; 5540fcf3ce44SJohn Forte IMA_STATUS status; 5541fcf3ce44SJohn Forte 5542fcf3ce44SJohn Forte if (number_of_plugins == -1) 5543fcf3ce44SJohn Forte InitLibrary(); 5544fcf3ce44SJohn Forte 5545fcf3ce44SJohn Forte if (pClientFn == NULL) 5546fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5547fcf3ce44SJohn Forte 5548fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5549fcf3ce44SJohn Forte 5550fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 5551fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5552fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5553fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5554fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5555fcf3ce44SJohn Forte /* check if deregistered already */ 5556fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 5557fcf3ce44SJohn Forte for (j = 0; 5558fcf3ce44SJohn Forte j < plugintable[i].number_of_vbcallbacks; j++) { 5559fcf3ce44SJohn Forte if (plugintable[i].vbcallback[j] == pClientFn) { 5560fcf3ce44SJohn Forte /* 5561fcf3ce44SJohn Forte * use IMA_ERROR_UNKNOWN_ERROR 5562fcf3ce44SJohn Forte * as a flag 5563fcf3ce44SJohn Forte */ 5564fcf3ce44SJohn Forte status = IMA_ERROR_UNKNOWN_ERROR; 5565fcf3ce44SJohn Forte break; 5566fcf3ce44SJohn Forte } 5567fcf3ce44SJohn Forte } 5568fcf3ce44SJohn Forte 5569fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 5570fcf3ce44SJohn Forte 5571fcf3ce44SJohn Forte #ifdef WIN32 5572fcf3ce44SJohn Forte PassFunc = 5573fcf3ce44SJohn Forte (IMA_DeregisterForObjectVisibilityChangesFn) 5574fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5575fcf3ce44SJohn Forte "IMA_DeregisterForObjectVisibilityChanges"); 5576fcf3ce44SJohn Forte #else 5577fcf3ce44SJohn Forte PassFunc = 5578fcf3ce44SJohn Forte (IMA_DeregisterForObjectVisibilityChangesFn) 5579fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5580fcf3ce44SJohn Forte "IMA_DeregisterForObjectVisibilityChanges"); 5581fcf3ce44SJohn Forte #endif 5582fcf3ce44SJohn Forte if (PassFunc != NULL) { 5583fcf3ce44SJohn Forte status = PassFunc(VisibilityCallback); 5584fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 5585fcf3ce44SJohn Forte /* 5586fcf3ce44SJohn Forte * where plugintable[i]. 5587fcf3ce44SJohn Forte * vbcallback[j] == pClientFn 5588fcf3ce44SJohn Forte */ 5589fcf3ce44SJohn Forte for (; j < 5590fcf3ce44SJohn Forte plugintable[i]. 5591fcf3ce44SJohn Forte number_of_vbcallbacks; 5592fcf3ce44SJohn Forte j++) { 5593fcf3ce44SJohn Forte plugintable[i]. 5594fcf3ce44SJohn Forte vbcallback[j] = 5595fcf3ce44SJohn Forte plugintable[i]. 5596fcf3ce44SJohn Forte vbcallback[j+1]; 5597fcf3ce44SJohn Forte 5598fcf3ce44SJohn Forte } 5599fcf3ce44SJohn Forte plugintable[i]. 5600fcf3ce44SJohn Forte number_of_vbcallbacks--; 5601fcf3ce44SJohn Forte } 5602fcf3ce44SJohn Forte } 5603fcf3ce44SJohn Forte } 5604fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5605fcf3ce44SJohn Forte } 5606fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) 5607fcf3ce44SJohn Forte break; 5608fcf3ce44SJohn Forte } 5609fcf3ce44SJohn Forte os_releasemutex(libMutex); 5610fcf3ce44SJohn Forte return (status); 5611fcf3ce44SJohn Forte 5612fcf3ce44SJohn Forte } 5613fcf3ce44SJohn Forte 5614fcf3ce44SJohn Forte 5615fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_RegisterForObjectPropertyChanges( 5616fcf3ce44SJohn Forte IMA_OBJECT_PROPERTY_FN pClientFn) { 5617fcf3ce44SJohn Forte IMA_RegisterForObjectPropertyChangesFn PassFunc; 5618fcf3ce44SJohn Forte IMA_UINT i; 5619fcf3ce44SJohn Forte IMA_UINT j; 5620fcf3ce44SJohn Forte IMA_STATUS status; 5621fcf3ce44SJohn Forte 5622fcf3ce44SJohn Forte if (number_of_plugins == -1) 5623fcf3ce44SJohn Forte InitLibrary(); 5624fcf3ce44SJohn Forte 5625fcf3ce44SJohn Forte if (pClientFn == NULL) 5626fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5627fcf3ce44SJohn Forte 5628fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5629fcf3ce44SJohn Forte 5630fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 5631fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5632fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5633fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5634fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5635fcf3ce44SJohn Forte if (plugintable[i].number_of_pccallbacks >= 5636fcf3ce44SJohn Forte IMA_MAX_CALLBACK_PER_PLUGIN) { 5637fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5638fcf3ce44SJohn Forte continue; 5639fcf3ce44SJohn Forte } 5640fcf3ce44SJohn Forte 5641fcf3ce44SJohn Forte /* check if registered already */ 5642fcf3ce44SJohn Forte for (j = 0; 5643fcf3ce44SJohn Forte j < plugintable[i].number_of_pccallbacks; 5644fcf3ce44SJohn Forte j++) { 5645fcf3ce44SJohn Forte if (plugintable[i].pccallback[j] == 5646fcf3ce44SJohn Forte pClientFn) { 5647fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 5648fcf3ce44SJohn Forte break; 5649fcf3ce44SJohn Forte } 5650fcf3ce44SJohn Forte } 5651fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 5652fcf3ce44SJohn Forte 5653fcf3ce44SJohn Forte #ifdef WIN32 5654fcf3ce44SJohn Forte PassFunc = 5655fcf3ce44SJohn Forte (IMA_RegisterForObjectPropertyChangesFn) 5656fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5657fcf3ce44SJohn Forte "IMA_RegisterForObjectPropertyChanges"); 5658fcf3ce44SJohn Forte #else 5659fcf3ce44SJohn Forte PassFunc = 5660fcf3ce44SJohn Forte (IMA_RegisterForObjectPropertyChangesFn) 5661fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5662fcf3ce44SJohn Forte "IMA_RegisterForObjectPropertyChanges"); 5663fcf3ce44SJohn Forte #endif 5664fcf3ce44SJohn Forte 5665fcf3ce44SJohn Forte if (PassFunc != NULL) { 5666fcf3ce44SJohn Forte status = PassFunc(PropertyCallback); 5667fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 5668fcf3ce44SJohn Forte j = plugintable[i]. 5669fcf3ce44SJohn Forte number_of_pccallbacks; 5670fcf3ce44SJohn Forte plugintable[i].pccallback[j] = 5671fcf3ce44SJohn Forte pClientFn; 5672fcf3ce44SJohn Forte plugintable[i]. 5673fcf3ce44SJohn Forte number_of_pccallbacks++; 5674fcf3ce44SJohn Forte } 5675fcf3ce44SJohn Forte 5676fcf3ce44SJohn Forte } 5677fcf3ce44SJohn Forte } 5678fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5679fcf3ce44SJohn Forte } 5680fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) 5681fcf3ce44SJohn Forte break; 5682fcf3ce44SJohn Forte 5683fcf3ce44SJohn Forte } 5684fcf3ce44SJohn Forte os_releasemutex(libMutex); 5685fcf3ce44SJohn Forte return (status); 5686fcf3ce44SJohn Forte 5687fcf3ce44SJohn Forte } 5688fcf3ce44SJohn Forte 5689fcf3ce44SJohn Forte 5690fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_DeregisterForObjectPropertyChanges( 5691fcf3ce44SJohn Forte IMA_OBJECT_PROPERTY_FN pClientFn) { 5692fcf3ce44SJohn Forte IMA_DeregisterForObjectPropertyChangesFn PassFunc; 5693fcf3ce44SJohn Forte IMA_UINT i; 5694fcf3ce44SJohn Forte IMA_UINT j; 5695fcf3ce44SJohn Forte IMA_STATUS status; 5696fcf3ce44SJohn Forte 5697fcf3ce44SJohn Forte if (number_of_plugins == -1) 5698fcf3ce44SJohn Forte InitLibrary(); 5699fcf3ce44SJohn Forte 5700fcf3ce44SJohn Forte if (pClientFn == NULL) 5701fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5702fcf3ce44SJohn Forte 5703fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5704fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 5705fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5706fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5707fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5708fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5709fcf3ce44SJohn Forte /* check if deregistered already */ 5710fcf3ce44SJohn Forte status = IMA_STATUS_SUCCESS; 5711fcf3ce44SJohn Forte for (j = 0; 5712fcf3ce44SJohn Forte j < plugintable[i].number_of_pccallbacks; 5713fcf3ce44SJohn Forte j++) { 5714fcf3ce44SJohn Forte if (plugintable[i].pccallback[j] == 5715fcf3ce44SJohn Forte pClientFn) { 5716fcf3ce44SJohn Forte /* 5717fcf3ce44SJohn Forte * use IMA_ERROR_UNKNOWN_ERROR 5718fcf3ce44SJohn Forte * as a flag 5719fcf3ce44SJohn Forte */ 5720fcf3ce44SJohn Forte status = IMA_ERROR_UNKNOWN_ERROR; 5721fcf3ce44SJohn Forte break; 5722fcf3ce44SJohn Forte } 5723fcf3ce44SJohn Forte } 5724fcf3ce44SJohn Forte 5725fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 5726fcf3ce44SJohn Forte 5727fcf3ce44SJohn Forte #ifdef WIN32 5728fcf3ce44SJohn Forte PassFunc = 5729fcf3ce44SJohn Forte (IMA_DeregisterForObjectPropertyChangesFn) 5730fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5731fcf3ce44SJohn Forte "IMA_DeregisterForObjectPropertyChanges"); 5732fcf3ce44SJohn Forte 5733fcf3ce44SJohn Forte #else 5734fcf3ce44SJohn Forte PassFunc = 5735fcf3ce44SJohn Forte (IMA_DeregisterForObjectPropertyChangesFn) 5736fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5737fcf3ce44SJohn Forte "IMA_DeregisterForObjectPropertyChanges"); 5738fcf3ce44SJohn Forte #endif 5739fcf3ce44SJohn Forte 5740fcf3ce44SJohn Forte if (PassFunc != NULL) { 5741fcf3ce44SJohn Forte status = PassFunc(PropertyCallback); 5742fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 5743fcf3ce44SJohn Forte /* 5744fcf3ce44SJohn Forte * where plugintable[i].vbcallback[ 5745fcf3ce44SJohn Forte * j] == pClientFn 5746fcf3ce44SJohn Forte */ 5747fcf3ce44SJohn Forte for (; j < plugintable[i]. 5748fcf3ce44SJohn Forte number_of_pccallbacks; 5749fcf3ce44SJohn Forte j++) { 5750fcf3ce44SJohn Forte plugintable[i]. 5751fcf3ce44SJohn Forte pccallback[j] 5752fcf3ce44SJohn Forte = plugintable[i]. 5753fcf3ce44SJohn Forte pccallback[j+1]; 5754fcf3ce44SJohn Forte 5755fcf3ce44SJohn Forte } 5756fcf3ce44SJohn Forte plugintable[i]. 5757fcf3ce44SJohn Forte number_of_pccallbacks--; 5758fcf3ce44SJohn Forte } 5759fcf3ce44SJohn Forte 5760fcf3ce44SJohn Forte } 5761fcf3ce44SJohn Forte } 5762fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5763fcf3ce44SJohn Forte } 5764fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) 5765fcf3ce44SJohn Forte break; 5766fcf3ce44SJohn Forte 5767fcf3ce44SJohn Forte } 5768fcf3ce44SJohn Forte os_releasemutex(libMutex); 5769fcf3ce44SJohn Forte return (status); 5770fcf3ce44SJohn Forte 5771fcf3ce44SJohn Forte } 5772fcf3ce44SJohn Forte 5773fcf3ce44SJohn Forte 5774fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetIpProperties( 5775fcf3ce44SJohn Forte IMA_OID oid, 5776fcf3ce44SJohn Forte IMA_IP_PROPERTIES *pProps) { 5777fcf3ce44SJohn Forte IMA_GetIpPropertiesFn PassFunc; 5778fcf3ce44SJohn Forte IMA_UINT i; 5779fcf3ce44SJohn Forte IMA_STATUS status; 5780fcf3ce44SJohn Forte 5781fcf3ce44SJohn Forte if (number_of_plugins == -1) 5782fcf3ce44SJohn Forte InitLibrary(); 5783fcf3ce44SJohn Forte 5784fcf3ce44SJohn Forte if (pProps == NULL) 5785fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5786fcf3ce44SJohn Forte 5787fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_PNP) 5788fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5789fcf3ce44SJohn Forte 5790fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5791fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5792fcf3ce44SJohn Forte 5793fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5794fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 5795fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5796fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5797fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5798fcf3ce44SJohn Forte #ifdef WIN32 5799fcf3ce44SJohn Forte PassFunc = (IMA_GetIpPropertiesFn) 5800fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5801fcf3ce44SJohn Forte "IMA_GetIpProperties"); 5802fcf3ce44SJohn Forte #else 5803fcf3ce44SJohn Forte PassFunc = (IMA_GetIpPropertiesFn) 5804fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5805fcf3ce44SJohn Forte "IMA_GetIpProperties"); 5806fcf3ce44SJohn Forte #endif 5807fcf3ce44SJohn Forte if (PassFunc != NULL) { 5808fcf3ce44SJohn Forte status = PassFunc(oid, pProps); 5809fcf3ce44SJohn Forte } 5810fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5811fcf3ce44SJohn Forte } 5812fcf3ce44SJohn Forte 5813fcf3ce44SJohn Forte break; 5814fcf3ce44SJohn Forte } 5815fcf3ce44SJohn Forte } 5816fcf3ce44SJohn Forte os_releasemutex(libMutex); 5817fcf3ce44SJohn Forte return (status); 5818fcf3ce44SJohn Forte } 5819fcf3ce44SJohn Forte 5820fcf3ce44SJohn Forte 5821fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetIpConfigMethod( 5822fcf3ce44SJohn Forte IMA_OID oid, 5823fcf3ce44SJohn Forte IMA_BOOL enableDhcpIpConfiguration) { 5824fcf3ce44SJohn Forte IMA_SetIpConfigMethodFn PassFunc; 5825fcf3ce44SJohn Forte IMA_UINT i; 5826fcf3ce44SJohn Forte IMA_STATUS status; 5827fcf3ce44SJohn Forte 5828fcf3ce44SJohn Forte if (number_of_plugins == -1) 5829fcf3ce44SJohn Forte InitLibrary(); 5830fcf3ce44SJohn Forte 5831fcf3ce44SJohn Forte if (enableDhcpIpConfiguration != IMA_TRUE && 5832fcf3ce44SJohn Forte enableDhcpIpConfiguration != IMA_FALSE) 5833fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5834fcf3ce44SJohn Forte 5835fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_PNP) 5836fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5837fcf3ce44SJohn Forte 5838fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5839fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5840fcf3ce44SJohn Forte 5841fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5842fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 5843fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5844fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5845fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5846fcf3ce44SJohn Forte #ifdef WIN32 5847fcf3ce44SJohn Forte PassFunc = (IMA_SetIpConfigMethodFn) 5848fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5849fcf3ce44SJohn Forte "IMA_SetIpConfigMethod"); 5850fcf3ce44SJohn Forte #else 5851fcf3ce44SJohn Forte PassFunc = (IMA_SetIpConfigMethodFn) 5852fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5853fcf3ce44SJohn Forte "IMA_SetIpConfigMethod"); 5854fcf3ce44SJohn Forte #endif 5855fcf3ce44SJohn Forte 5856fcf3ce44SJohn Forte if (PassFunc != NULL) { 5857fcf3ce44SJohn Forte status = PassFunc(oid, 5858fcf3ce44SJohn Forte enableDhcpIpConfiguration); 5859fcf3ce44SJohn Forte } 5860fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5861fcf3ce44SJohn Forte } 5862fcf3ce44SJohn Forte 5863fcf3ce44SJohn Forte break; 5864fcf3ce44SJohn Forte } 5865fcf3ce44SJohn Forte } 5866fcf3ce44SJohn Forte os_releasemutex(libMutex); 5867fcf3ce44SJohn Forte return (status); 5868fcf3ce44SJohn Forte } 5869fcf3ce44SJohn Forte 5870fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetSubnetMask( 5871fcf3ce44SJohn Forte IMA_OID oid, 5872fcf3ce44SJohn Forte IMA_IP_ADDRESS subnetMask) { 5873fcf3ce44SJohn Forte IMA_SetSubnetMaskFn PassFunc; 5874fcf3ce44SJohn Forte IMA_UINT i; 5875fcf3ce44SJohn Forte IMA_STATUS status; 5876fcf3ce44SJohn Forte 5877fcf3ce44SJohn Forte if (number_of_plugins == -1) 5878fcf3ce44SJohn Forte InitLibrary(); 5879fcf3ce44SJohn Forte 5880fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_PNP) 5881fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5882fcf3ce44SJohn Forte 5883fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5884fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5885fcf3ce44SJohn Forte 5886fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5887fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 5888fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5889fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5890fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5891fcf3ce44SJohn Forte #ifdef WIN32 5892fcf3ce44SJohn Forte PassFunc = (IMA_SetSubnetMaskFn) 5893fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5894fcf3ce44SJohn Forte "IMA_SetSubnetMask"); 5895fcf3ce44SJohn Forte #else 5896fcf3ce44SJohn Forte PassFunc = (IMA_SetSubnetMaskFn) 5897fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5898fcf3ce44SJohn Forte "IMA_SetSubnetMask"); 5899fcf3ce44SJohn Forte #endif 5900fcf3ce44SJohn Forte 5901fcf3ce44SJohn Forte if (PassFunc != NULL) { 5902fcf3ce44SJohn Forte status = PassFunc(oid, subnetMask); 5903fcf3ce44SJohn Forte } 5904fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5905fcf3ce44SJohn Forte } 5906fcf3ce44SJohn Forte 5907fcf3ce44SJohn Forte break; 5908fcf3ce44SJohn Forte } 5909fcf3ce44SJohn Forte } 5910fcf3ce44SJohn Forte os_releasemutex(libMutex); 5911fcf3ce44SJohn Forte return (status); 5912fcf3ce44SJohn Forte } 5913fcf3ce44SJohn Forte 5914fcf3ce44SJohn Forte 5915fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetDnsServerAddress( 5916fcf3ce44SJohn Forte IMA_OID oid, 5917fcf3ce44SJohn Forte const IMA_IP_ADDRESS *primaryDnsServerAddress, 5918fcf3ce44SJohn Forte const IMA_IP_ADDRESS *alternateDnsServerAddress) { 5919fcf3ce44SJohn Forte IMA_SetDnsServerAddressFn PassFunc; 5920fcf3ce44SJohn Forte IMA_UINT i; 5921fcf3ce44SJohn Forte IMA_STATUS status; 5922fcf3ce44SJohn Forte 5923fcf3ce44SJohn Forte if (number_of_plugins == -1) 5924fcf3ce44SJohn Forte InitLibrary(); 5925fcf3ce44SJohn Forte 5926fcf3ce44SJohn Forte if (primaryDnsServerAddress == NULL && 5927fcf3ce44SJohn Forte alternateDnsServerAddress != NULL) 5928fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5929fcf3ce44SJohn Forte 5930fcf3ce44SJohn Forte if (primaryDnsServerAddress != NULL && 5931fcf3ce44SJohn Forte alternateDnsServerAddress != NULL && 5932fcf3ce44SJohn Forte memcmp(primaryDnsServerAddress->ipAddress, 5933fcf3ce44SJohn Forte alternateDnsServerAddress->ipAddress, 5934fcf3ce44SJohn Forte sizeof (primaryDnsServerAddress->ipAddress)) == 0) 5935fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 5936fcf3ce44SJohn Forte 5937fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_PNP) 5938fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5939fcf3ce44SJohn Forte 5940fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5941fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5942fcf3ce44SJohn Forte 5943fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5944fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 5945fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5946fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5947fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5948fcf3ce44SJohn Forte #ifdef WIN32 5949fcf3ce44SJohn Forte PassFunc = (IMA_SetDnsServerAddressFn) 5950fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5951fcf3ce44SJohn Forte "IMA_SetDnsServerAddress"); 5952fcf3ce44SJohn Forte #else 5953fcf3ce44SJohn Forte PassFunc = (IMA_SetDnsServerAddressFn) 5954fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 5955fcf3ce44SJohn Forte "IMA_SetDnsServerAddress"); 5956fcf3ce44SJohn Forte #endif 5957fcf3ce44SJohn Forte 5958fcf3ce44SJohn Forte if (PassFunc != NULL) { 5959fcf3ce44SJohn Forte status = PassFunc(oid, 5960fcf3ce44SJohn Forte primaryDnsServerAddress, 5961fcf3ce44SJohn Forte alternateDnsServerAddress); 5962fcf3ce44SJohn Forte } 5963fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 5964fcf3ce44SJohn Forte } 5965fcf3ce44SJohn Forte 5966fcf3ce44SJohn Forte break; 5967fcf3ce44SJohn Forte } 5968fcf3ce44SJohn Forte } 5969fcf3ce44SJohn Forte os_releasemutex(libMutex); 5970fcf3ce44SJohn Forte return (status); 5971fcf3ce44SJohn Forte } 5972fcf3ce44SJohn Forte 5973fcf3ce44SJohn Forte 5974fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetDefaultGateway( 5975fcf3ce44SJohn Forte IMA_OID oid, 5976fcf3ce44SJohn Forte IMA_IP_ADDRESS defaultGateway) { 5977fcf3ce44SJohn Forte IMA_SetDefaultGatewayFn PassFunc; 5978fcf3ce44SJohn Forte IMA_UINT i; 5979fcf3ce44SJohn Forte IMA_STATUS status; 5980fcf3ce44SJohn Forte 5981fcf3ce44SJohn Forte if (number_of_plugins == -1) 5982fcf3ce44SJohn Forte InitLibrary(); 5983fcf3ce44SJohn Forte 5984fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_PNP) 5985fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 5986fcf3ce44SJohn Forte 5987fcf3ce44SJohn Forte os_obtainmutex(libMutex); 5988fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 5989fcf3ce44SJohn Forte 5990fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 5991fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 5992fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 5993fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 5994fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 5995fcf3ce44SJohn Forte #ifdef WIN32 5996fcf3ce44SJohn Forte PassFunc = (IMA_SetDefaultGatewayFn) 5997fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 5998fcf3ce44SJohn Forte "IMA_SetDefaultGateway"); 5999fcf3ce44SJohn Forte #else 6000fcf3ce44SJohn Forte PassFunc = (IMA_SetDefaultGatewayFn) 6001fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6002fcf3ce44SJohn Forte "IMA_SetDefaultGateway"); 6003fcf3ce44SJohn Forte #endif 6004fcf3ce44SJohn Forte 6005fcf3ce44SJohn Forte if (PassFunc != NULL) { 6006fcf3ce44SJohn Forte status = PassFunc(oid, defaultGateway); 6007fcf3ce44SJohn Forte } 6008fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6009fcf3ce44SJohn Forte } 6010fcf3ce44SJohn Forte 6011fcf3ce44SJohn Forte break; 6012fcf3ce44SJohn Forte } 6013fcf3ce44SJohn Forte } 6014fcf3ce44SJohn Forte os_releasemutex(libMutex); 6015fcf3ce44SJohn Forte return (status); 6016fcf3ce44SJohn Forte } 6017fcf3ce44SJohn Forte 6018fcf3ce44SJohn Forte 6019fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetSupportedAuthMethods( 6020fcf3ce44SJohn Forte IMA_OID lhbaOid, 6021fcf3ce44SJohn Forte IMA_BOOL getSettableMethods, 6022fcf3ce44SJohn Forte IMA_UINT *pMethodCount, 6023fcf3ce44SJohn Forte IMA_AUTHMETHOD *pMethodList) { 6024fcf3ce44SJohn Forte IMA_GetSupportedAuthMethodsFn PassFunc; 6025fcf3ce44SJohn Forte IMA_UINT i; 6026fcf3ce44SJohn Forte IMA_STATUS status; 6027fcf3ce44SJohn Forte 6028fcf3ce44SJohn Forte if (number_of_plugins == -1) 6029fcf3ce44SJohn Forte InitLibrary(); 6030fcf3ce44SJohn Forte 6031fcf3ce44SJohn Forte if (pMethodCount == NULL) 6032fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6033fcf3ce44SJohn Forte 6034fcf3ce44SJohn Forte if (lhbaOid.objectType != IMA_OBJECT_TYPE_LHBA) 6035fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6036fcf3ce44SJohn Forte 6037fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6038fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6039fcf3ce44SJohn Forte 6040fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6041fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaOid.ownerId) { 6042fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6043fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6044fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6045fcf3ce44SJohn Forte #ifdef WIN32 6046fcf3ce44SJohn Forte PassFunc = (IMA_GetSupportedAuthMethodsFn) 6047fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6048fcf3ce44SJohn Forte "IMA_GetSupportedAuthMethods"); 6049fcf3ce44SJohn Forte #else 6050fcf3ce44SJohn Forte PassFunc = (IMA_GetSupportedAuthMethodsFn) 6051fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6052fcf3ce44SJohn Forte "IMA_GetSupportedAuthMethods"); 6053fcf3ce44SJohn Forte #endif 6054fcf3ce44SJohn Forte 6055fcf3ce44SJohn Forte if (PassFunc != NULL) { 6056fcf3ce44SJohn Forte status = PassFunc(lhbaOid, 6057fcf3ce44SJohn Forte getSettableMethods, 6058fcf3ce44SJohn Forte pMethodCount, pMethodList); 6059fcf3ce44SJohn Forte } 6060fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6061fcf3ce44SJohn Forte } 6062fcf3ce44SJohn Forte 6063fcf3ce44SJohn Forte break; 6064fcf3ce44SJohn Forte } 6065fcf3ce44SJohn Forte } 6066fcf3ce44SJohn Forte os_releasemutex(libMutex); 6067fcf3ce44SJohn Forte return (status); 6068fcf3ce44SJohn Forte } 6069fcf3ce44SJohn Forte 6070fcf3ce44SJohn Forte 6071fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetInUseInitiatorAuthMethods( 6072fcf3ce44SJohn Forte IMA_OID lhbaOid, 6073fcf3ce44SJohn Forte IMA_UINT *pMethodCount, 6074fcf3ce44SJohn Forte IMA_AUTHMETHOD *pMethodList) { 6075fcf3ce44SJohn Forte IMA_GetInUseInitiatorAuthMethodsFn PassFunc; 6076fcf3ce44SJohn Forte IMA_UINT i; 6077fcf3ce44SJohn Forte IMA_STATUS status; 6078fcf3ce44SJohn Forte 6079fcf3ce44SJohn Forte if (number_of_plugins == -1) 6080fcf3ce44SJohn Forte InitLibrary(); 6081fcf3ce44SJohn Forte 6082fcf3ce44SJohn Forte if (pMethodCount == NULL) 6083fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6084fcf3ce44SJohn Forte 6085fcf3ce44SJohn Forte if (lhbaOid.objectType != IMA_OBJECT_TYPE_LHBA) 6086fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6087fcf3ce44SJohn Forte 6088fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6089fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6090fcf3ce44SJohn Forte 6091fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6092fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaOid.ownerId) { 6093fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6094fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6095fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6096fcf3ce44SJohn Forte #ifdef WIN32 6097fcf3ce44SJohn Forte PassFunc = (IMA_GetInUseInitiatorAuthMethodsFn) 6098fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6099fcf3ce44SJohn Forte "IMA_GetInUseInitiatorAuthMethods"); 6100fcf3ce44SJohn Forte #else 6101fcf3ce44SJohn Forte PassFunc = (IMA_GetInUseInitiatorAuthMethodsFn) 6102fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6103fcf3ce44SJohn Forte "IMA_GetInUseInitiatorAuthMethods"); 6104fcf3ce44SJohn Forte #endif 6105fcf3ce44SJohn Forte 6106fcf3ce44SJohn Forte if (PassFunc != NULL) { 6107fcf3ce44SJohn Forte status = PassFunc(lhbaOid, 6108fcf3ce44SJohn Forte pMethodCount, pMethodList); 6109fcf3ce44SJohn Forte } 6110fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6111fcf3ce44SJohn Forte } 6112fcf3ce44SJohn Forte 6113fcf3ce44SJohn Forte break; 6114fcf3ce44SJohn Forte } 6115fcf3ce44SJohn Forte } 6116fcf3ce44SJohn Forte os_releasemutex(libMutex); 6117fcf3ce44SJohn Forte return (status); 6118fcf3ce44SJohn Forte } 6119fcf3ce44SJohn Forte 6120fcf3ce44SJohn Forte 6121fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetInitiatorAuthParms( 6122fcf3ce44SJohn Forte IMA_OID lhbaOid, 6123fcf3ce44SJohn Forte IMA_AUTHMETHOD method, 6124fcf3ce44SJohn Forte IMA_INITIATOR_AUTHPARMS *pParms) { 6125fcf3ce44SJohn Forte IMA_GetInitiatorAuthParmsFn PassFunc; 6126fcf3ce44SJohn Forte IMA_UINT i; 6127fcf3ce44SJohn Forte IMA_STATUS status; 6128fcf3ce44SJohn Forte 6129fcf3ce44SJohn Forte if (number_of_plugins == -1) 6130fcf3ce44SJohn Forte InitLibrary(); 6131fcf3ce44SJohn Forte 6132fcf3ce44SJohn Forte if (pParms == NULL) 6133fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6134fcf3ce44SJohn Forte 6135fcf3ce44SJohn Forte if (lhbaOid.objectType != IMA_OBJECT_TYPE_LHBA) 6136fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6137fcf3ce44SJohn Forte 6138fcf3ce44SJohn Forte if (method != IMA_AUTHMETHOD_NONE && 6139fcf3ce44SJohn Forte method != IMA_AUTHMETHOD_CHAP && 6140fcf3ce44SJohn Forte method != IMA_AUTHMETHOD_SRP && 6141fcf3ce44SJohn Forte method != IMA_AUTHMETHOD_KRB5 && 6142fcf3ce44SJohn Forte method != IMA_AUTHMETHOD_SPKM1 && 6143fcf3ce44SJohn Forte method != IMA_AUTHMETHOD_SPKM2) 6144fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6145fcf3ce44SJohn Forte 6146fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6147fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6148fcf3ce44SJohn Forte 6149fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6150fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaOid.ownerId) { 6151fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6152fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6153fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6154fcf3ce44SJohn Forte #ifdef WIN32 6155fcf3ce44SJohn Forte PassFunc = (IMA_GetInitiatorAuthParmsFn) 6156fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6157fcf3ce44SJohn Forte "IMA_GetInitiatorAuthParms"); 6158fcf3ce44SJohn Forte #else 6159fcf3ce44SJohn Forte PassFunc = (IMA_GetInitiatorAuthParmsFn) 6160fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6161fcf3ce44SJohn Forte "IMA_GetInitiatorAuthParms"); 6162fcf3ce44SJohn Forte #endif 6163fcf3ce44SJohn Forte 6164fcf3ce44SJohn Forte if (PassFunc != NULL) { 6165fcf3ce44SJohn Forte status = PassFunc(lhbaOid, 6166fcf3ce44SJohn Forte method, pParms); 6167fcf3ce44SJohn Forte } 6168fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6169fcf3ce44SJohn Forte } 6170fcf3ce44SJohn Forte 6171fcf3ce44SJohn Forte break; 6172fcf3ce44SJohn Forte } 6173fcf3ce44SJohn Forte } 6174fcf3ce44SJohn Forte os_releasemutex(libMutex); 6175fcf3ce44SJohn Forte return (status); 6176fcf3ce44SJohn Forte } 6177fcf3ce44SJohn Forte 6178fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetInitiatorAuthMethods( 6179fcf3ce44SJohn Forte IMA_OID lhbaOid, 6180fcf3ce44SJohn Forte IMA_UINT methodCount, 6181fcf3ce44SJohn Forte const IMA_AUTHMETHOD *pMethodList) { 6182fcf3ce44SJohn Forte IMA_SetInitiatorAuthMethodsFn PassFunc; 6183fcf3ce44SJohn Forte IMA_UINT i; 6184fcf3ce44SJohn Forte IMA_STATUS status; 6185fcf3ce44SJohn Forte 6186fcf3ce44SJohn Forte if (number_of_plugins == -1) 6187fcf3ce44SJohn Forte InitLibrary(); 6188fcf3ce44SJohn Forte 6189fcf3ce44SJohn Forte if (methodCount == 0 || pMethodList == NULL) 6190fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6191fcf3ce44SJohn Forte 6192fcf3ce44SJohn Forte if (lhbaOid.objectType != IMA_OBJECT_TYPE_LHBA) 6193fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6194fcf3ce44SJohn Forte 6195fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6196fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6197fcf3ce44SJohn Forte 6198fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6199fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaOid.ownerId) { 6200fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6201fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6202fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6203fcf3ce44SJohn Forte #ifdef WIN32 6204fcf3ce44SJohn Forte PassFunc = (IMA_SetInitiatorAuthMethodsFn) 6205fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6206fcf3ce44SJohn Forte "IMA_SetInitiatorAuthMethods"); 6207fcf3ce44SJohn Forte #else 6208fcf3ce44SJohn Forte PassFunc = (IMA_SetInitiatorAuthMethodsFn) 6209fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6210fcf3ce44SJohn Forte "IMA_SetInitiatorAuthMethods"); 6211fcf3ce44SJohn Forte #endif 6212fcf3ce44SJohn Forte 6213fcf3ce44SJohn Forte if (PassFunc != NULL) { 6214fcf3ce44SJohn Forte status = PassFunc(lhbaOid, 6215fcf3ce44SJohn Forte methodCount, pMethodList); 6216fcf3ce44SJohn Forte } 6217fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6218fcf3ce44SJohn Forte } 6219fcf3ce44SJohn Forte 6220fcf3ce44SJohn Forte break; 6221fcf3ce44SJohn Forte } 6222fcf3ce44SJohn Forte } 6223fcf3ce44SJohn Forte os_releasemutex(libMutex); 6224fcf3ce44SJohn Forte return (status); 6225fcf3ce44SJohn Forte } 6226fcf3ce44SJohn Forte 6227fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_SetInitiatorAuthParms( 6228fcf3ce44SJohn Forte IMA_OID lhbaOid, 6229fcf3ce44SJohn Forte IMA_AUTHMETHOD method, 6230fcf3ce44SJohn Forte const IMA_INITIATOR_AUTHPARMS *pParms) { 6231fcf3ce44SJohn Forte 6232fcf3ce44SJohn Forte IMA_SetInitiatorAuthParmsFn PassFunc; 6233fcf3ce44SJohn Forte IMA_UINT i; 6234fcf3ce44SJohn Forte IMA_STATUS status; 6235fcf3ce44SJohn Forte 6236fcf3ce44SJohn Forte if (number_of_plugins == -1) 6237fcf3ce44SJohn Forte InitLibrary(); 6238fcf3ce44SJohn Forte 6239fcf3ce44SJohn Forte if (pParms == NULL) 6240fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6241fcf3ce44SJohn Forte 6242fcf3ce44SJohn Forte if (method != IMA_AUTHMETHOD_NONE && 6243fcf3ce44SJohn Forte method != IMA_AUTHMETHOD_CHAP && 6244fcf3ce44SJohn Forte method != IMA_AUTHMETHOD_SRP && 6245fcf3ce44SJohn Forte method != IMA_AUTHMETHOD_KRB5 && 6246fcf3ce44SJohn Forte method != IMA_AUTHMETHOD_SPKM1 && 6247fcf3ce44SJohn Forte method != IMA_AUTHMETHOD_SPKM2) 6248fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6249fcf3ce44SJohn Forte 6250fcf3ce44SJohn Forte if (lhbaOid.objectType != IMA_OBJECT_TYPE_LHBA) 6251fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6252fcf3ce44SJohn Forte 6253fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6254fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6255fcf3ce44SJohn Forte 6256fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6257fcf3ce44SJohn Forte if (plugintable[i].ownerId == lhbaOid.ownerId) { 6258fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6259fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6260fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6261fcf3ce44SJohn Forte #ifdef WIN32 6262fcf3ce44SJohn Forte PassFunc = (IMA_SetInitiatorAuthParmsFn) 6263fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6264fcf3ce44SJohn Forte "IMA_SetInitiatorAuthParms"); 6265fcf3ce44SJohn Forte #else 6266fcf3ce44SJohn Forte PassFunc = (IMA_SetInitiatorAuthParmsFn) 6267fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6268fcf3ce44SJohn Forte "IMA_SetInitiatorAuthParms"); 6269fcf3ce44SJohn Forte #endif 6270fcf3ce44SJohn Forte 6271fcf3ce44SJohn Forte if (PassFunc != NULL) { 6272fcf3ce44SJohn Forte status = 6273fcf3ce44SJohn Forte PassFunc( 6274fcf3ce44SJohn Forte lhbaOid, method, pParms); 6275fcf3ce44SJohn Forte } 6276fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6277fcf3ce44SJohn Forte } 6278fcf3ce44SJohn Forte 6279fcf3ce44SJohn Forte break; 6280fcf3ce44SJohn Forte } 6281fcf3ce44SJohn Forte } 6282fcf3ce44SJohn Forte os_releasemutex(libMutex); 6283fcf3ce44SJohn Forte return (status); 6284fcf3ce44SJohn Forte } 6285fcf3ce44SJohn Forte 6286fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetStaticDiscoveryTargetOidList( 6287fcf3ce44SJohn Forte IMA_OID oid, 6288fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 6289fcf3ce44SJohn Forte IMA_GetStaticDiscoveryTargetOidListFn PassFunc; 6290fcf3ce44SJohn Forte IMA_UINT i; 6291fcf3ce44SJohn Forte IMA_STATUS status; 6292fcf3ce44SJohn Forte 6293fcf3ce44SJohn Forte if (number_of_plugins == -1) 6294fcf3ce44SJohn Forte InitLibrary(); 6295fcf3ce44SJohn Forte 6296fcf3ce44SJohn Forte if (ppList == NULL) 6297fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6298fcf3ce44SJohn Forte 6299fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_LHBA && 6300fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_PNP) 6301fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6302fcf3ce44SJohn Forte 6303fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6304fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6305fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6306fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 6307fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6308fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6309fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6310fcf3ce44SJohn Forte #ifdef WIN32 6311fcf3ce44SJohn Forte PassFunc = 6312fcf3ce44SJohn Forte (IMA_GetStaticDiscoveryTargetOidListFn) 6313fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6314fcf3ce44SJohn Forte "IMA_GetStaticDiscoveryTargetOidList"); 6315fcf3ce44SJohn Forte #else 6316fcf3ce44SJohn Forte PassFunc = 6317fcf3ce44SJohn Forte (IMA_GetStaticDiscoveryTargetOidListFn) 6318fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6319fcf3ce44SJohn Forte "IMA_GetStaticDiscoveryTargetOidList"); 6320fcf3ce44SJohn Forte #endif 6321fcf3ce44SJohn Forte if (PassFunc != NULL) { 6322fcf3ce44SJohn Forte status = PassFunc(oid, ppList); 6323fcf3ce44SJohn Forte } 6324fcf3ce44SJohn Forte 6325fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6326fcf3ce44SJohn Forte } 6327fcf3ce44SJohn Forte 6328fcf3ce44SJohn Forte break; 6329fcf3ce44SJohn Forte } 6330fcf3ce44SJohn Forte } 6331fcf3ce44SJohn Forte os_releasemutex(libMutex); 6332fcf3ce44SJohn Forte return (status); 6333fcf3ce44SJohn Forte } 6334fcf3ce44SJohn Forte 6335fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetDiscoveryProperties( 6336fcf3ce44SJohn Forte IMA_OID oid, 6337fcf3ce44SJohn Forte IMA_DISCOVERY_PROPERTIES *pProps) { 6338fcf3ce44SJohn Forte IMA_GetDiscoveryPropertiesFn PassFunc; 6339fcf3ce44SJohn Forte IMA_UINT i; 6340fcf3ce44SJohn Forte IMA_STATUS status; 6341fcf3ce44SJohn Forte 6342fcf3ce44SJohn Forte if (number_of_plugins == -1) 6343fcf3ce44SJohn Forte InitLibrary(); 6344fcf3ce44SJohn Forte 6345fcf3ce44SJohn Forte if (pProps == NULL) 6346fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6347fcf3ce44SJohn Forte 6348fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_PHBA && 6349fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_LHBA) 6350fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6351fcf3ce44SJohn Forte 6352fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6353fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6354fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6355fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 6356fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6357fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6358fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6359fcf3ce44SJohn Forte #ifdef WIN32 6360fcf3ce44SJohn Forte PassFunc = (IMA_GetDiscoveryPropertiesFn) 6361fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6362fcf3ce44SJohn Forte "IMA_GetDiscoveryProperties"); 6363fcf3ce44SJohn Forte #else 6364fcf3ce44SJohn Forte PassFunc = (IMA_GetDiscoveryPropertiesFn) 6365fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6366fcf3ce44SJohn Forte "IMA_GetDiscoveryProperties"); 6367fcf3ce44SJohn Forte #endif 6368fcf3ce44SJohn Forte 6369fcf3ce44SJohn Forte if (PassFunc != NULL) { 6370fcf3ce44SJohn Forte status = PassFunc(oid, pProps); 6371fcf3ce44SJohn Forte } 6372fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6373fcf3ce44SJohn Forte } 6374fcf3ce44SJohn Forte 6375fcf3ce44SJohn Forte break; 6376fcf3ce44SJohn Forte } 6377fcf3ce44SJohn Forte } 6378fcf3ce44SJohn Forte os_releasemutex(libMutex); 6379fcf3ce44SJohn Forte return (status); 6380fcf3ce44SJohn Forte } 6381fcf3ce44SJohn Forte 6382fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_AddDiscoveryAddress( 6383fcf3ce44SJohn Forte IMA_OID oid, 6384fcf3ce44SJohn Forte const IMA_TARGET_ADDRESS discoveryAddress, 6385fcf3ce44SJohn Forte IMA_OID *pDiscoveryAddressOid) { 6386fcf3ce44SJohn Forte IMA_AddDiscoveryAddressFn PassFunc; 6387fcf3ce44SJohn Forte IMA_UINT i; 6388fcf3ce44SJohn Forte IMA_STATUS status; 6389fcf3ce44SJohn Forte 6390fcf3ce44SJohn Forte if (number_of_plugins == -1) 6391fcf3ce44SJohn Forte InitLibrary(); 6392fcf3ce44SJohn Forte 6393fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_LHBA && 6394fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_PNP) 6395fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6396fcf3ce44SJohn Forte 6397fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6398fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6399fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6400fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 6401fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6402fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6403fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6404fcf3ce44SJohn Forte #ifdef WIN32 6405fcf3ce44SJohn Forte PassFunc = (IMA_AddDiscoveryAddressFn) 6406fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6407fcf3ce44SJohn Forte "IMA_AddDiscoveryAddress"); 6408fcf3ce44SJohn Forte #else 6409fcf3ce44SJohn Forte PassFunc = (IMA_AddDiscoveryAddressFn) 6410fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6411fcf3ce44SJohn Forte "IMA_AddDiscoveryAddress"); 6412fcf3ce44SJohn Forte #endif 6413fcf3ce44SJohn Forte 6414fcf3ce44SJohn Forte if (PassFunc != NULL) { 6415fcf3ce44SJohn Forte status = PassFunc(oid, 6416fcf3ce44SJohn Forte discoveryAddress, 6417fcf3ce44SJohn Forte pDiscoveryAddressOid); 6418fcf3ce44SJohn Forte } 6419fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6420fcf3ce44SJohn Forte } 6421fcf3ce44SJohn Forte 6422fcf3ce44SJohn Forte break; 6423fcf3ce44SJohn Forte } 6424fcf3ce44SJohn Forte } 6425fcf3ce44SJohn Forte os_releasemutex(libMutex); 6426fcf3ce44SJohn Forte return (status); 6427fcf3ce44SJohn Forte } 6428fcf3ce44SJohn Forte 6429fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_AddStaticDiscoveryTarget( 6430fcf3ce44SJohn Forte IMA_OID oid, 6431fcf3ce44SJohn Forte const IMA_STATIC_DISCOVERY_TARGET staticDiscoveryTarget, 6432fcf3ce44SJohn Forte IMA_OID *pStaticDiscoveryTargetOid) { 6433fcf3ce44SJohn Forte IMA_AddStaticDiscoveryTargetFn PassFunc; 6434fcf3ce44SJohn Forte IMA_UINT i; 6435fcf3ce44SJohn Forte IMA_STATUS status; 6436fcf3ce44SJohn Forte 6437fcf3ce44SJohn Forte if (number_of_plugins == -1) 6438fcf3ce44SJohn Forte InitLibrary(); 6439fcf3ce44SJohn Forte 6440fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_LHBA && 6441fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_PNP) 6442fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6443fcf3ce44SJohn Forte 6444fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6445fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6446fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6447fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 6448fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6449fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6450fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6451fcf3ce44SJohn Forte #ifdef WIN32 6452fcf3ce44SJohn Forte PassFunc = (IMA_AddStaticDiscoveryTargetFn) 6453fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6454fcf3ce44SJohn Forte "IMA_AddStaticDiscoveryTarget"); 6455fcf3ce44SJohn Forte 6456fcf3ce44SJohn Forte #else 6457fcf3ce44SJohn Forte PassFunc = (IMA_AddStaticDiscoveryTargetFn) 6458fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6459fcf3ce44SJohn Forte "IMA_AddStaticDiscoveryTarget"); 6460fcf3ce44SJohn Forte #endif 6461fcf3ce44SJohn Forte 6462fcf3ce44SJohn Forte if (PassFunc != NULL) { 6463fcf3ce44SJohn Forte status = PassFunc(oid, 6464fcf3ce44SJohn Forte staticDiscoveryTarget, 6465fcf3ce44SJohn Forte pStaticDiscoveryTargetOid); 6466fcf3ce44SJohn Forte } 6467fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6468fcf3ce44SJohn Forte } 6469fcf3ce44SJohn Forte 6470fcf3ce44SJohn Forte break; 6471fcf3ce44SJohn Forte } 6472fcf3ce44SJohn Forte } 6473fcf3ce44SJohn Forte os_releasemutex(libMutex); 6474fcf3ce44SJohn Forte return (status); 6475fcf3ce44SJohn Forte } 6476fcf3ce44SJohn Forte 6477fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_CommitHbaParameters(IMA_OID oid, 6478fcf3ce44SJohn Forte IMA_COMMIT_LEVEL commitLevel) 6479fcf3ce44SJohn Forte { 6480fcf3ce44SJohn Forte IMA_CommitHbaParametersFn PassFunc; 6481fcf3ce44SJohn Forte IMA_UINT i; 6482fcf3ce44SJohn Forte IMA_STATUS status; 6483fcf3ce44SJohn Forte 6484fcf3ce44SJohn Forte if (number_of_plugins == -1) 6485fcf3ce44SJohn Forte InitLibrary(); 6486fcf3ce44SJohn Forte 6487fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_LHBA && 6488fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_PHBA) 6489fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6490fcf3ce44SJohn Forte 6491fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6492fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6493fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6494fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 6495fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6496fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6497fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6498fcf3ce44SJohn Forte #ifdef WIN32 6499fcf3ce44SJohn Forte PassFunc = (IMA_CommitHbaParametersFn) 6500fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6501fcf3ce44SJohn Forte "IMA_CommitHbaParameters"); 6502fcf3ce44SJohn Forte #else 6503fcf3ce44SJohn Forte PassFunc = (IMA_CommitHbaParametersFn) 6504fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6505fcf3ce44SJohn Forte "IMA_CommitHbaParameters"); 6506fcf3ce44SJohn Forte #endif 6507fcf3ce44SJohn Forte 6508fcf3ce44SJohn Forte if (PassFunc != NULL) { 6509fcf3ce44SJohn Forte status = PassFunc(oid, commitLevel); 6510fcf3ce44SJohn Forte } 6511fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6512fcf3ce44SJohn Forte } 6513fcf3ce44SJohn Forte 6514fcf3ce44SJohn Forte break; 6515fcf3ce44SJohn Forte } 6516fcf3ce44SJohn Forte } 6517fcf3ce44SJohn Forte os_releasemutex(libMutex); 6518fcf3ce44SJohn Forte return (status); 6519fcf3ce44SJohn Forte } 6520fcf3ce44SJohn Forte 6521fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_RemoveStaticDiscoveryTarget( 6522fcf3ce44SJohn Forte IMA_OID oid) { 6523fcf3ce44SJohn Forte IMA_RemoveStaticDiscoveryTargetFn PassFunc; 6524fcf3ce44SJohn Forte IMA_UINT i; 6525fcf3ce44SJohn Forte IMA_STATUS status; 6526fcf3ce44SJohn Forte 6527fcf3ce44SJohn Forte if (number_of_plugins == -1) 6528fcf3ce44SJohn Forte InitLibrary(); 6529fcf3ce44SJohn Forte 6530fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_STATIC_DISCOVERY_TARGET) 6531fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6532fcf3ce44SJohn Forte 6533fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6534fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6535fcf3ce44SJohn Forte 6536fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6537fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 6538fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6539fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6540fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6541fcf3ce44SJohn Forte #ifdef WIN32 6542fcf3ce44SJohn Forte PassFunc = (IMA_RemoveStaticDiscoveryTargetFn) 6543fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6544fcf3ce44SJohn Forte "IMA_RemoveStaticDiscoveryTarget"); 6545fcf3ce44SJohn Forte #else 6546fcf3ce44SJohn Forte PassFunc = (IMA_RemoveStaticDiscoveryTargetFn) 6547fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6548fcf3ce44SJohn Forte "IMA_RemoveStaticDiscoveryTarget"); 6549fcf3ce44SJohn Forte #endif 6550fcf3ce44SJohn Forte 6551fcf3ce44SJohn Forte if (PassFunc != NULL) { 6552fcf3ce44SJohn Forte status = PassFunc(oid); 6553fcf3ce44SJohn Forte } 6554fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6555fcf3ce44SJohn Forte } 6556fcf3ce44SJohn Forte 6557fcf3ce44SJohn Forte break; 6558fcf3ce44SJohn Forte } 6559fcf3ce44SJohn Forte } 6560fcf3ce44SJohn Forte os_releasemutex(libMutex); 6561fcf3ce44SJohn Forte return (status); 6562fcf3ce44SJohn Forte } 6563fcf3ce44SJohn Forte 6564fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetStaticDiscoveryTargetProperties( 6565fcf3ce44SJohn Forte IMA_OID staticDiscoveryTargetOid, 6566fcf3ce44SJohn Forte IMA_STATIC_DISCOVERY_TARGET_PROPERTIES *pProps) { 6567fcf3ce44SJohn Forte IMA_GetStaticDiscoveryTargetPropertiesFn PassFunc; 6568fcf3ce44SJohn Forte IMA_UINT i; 6569fcf3ce44SJohn Forte IMA_STATUS status; 6570fcf3ce44SJohn Forte 6571fcf3ce44SJohn Forte if (number_of_plugins == -1) 6572fcf3ce44SJohn Forte InitLibrary(); 6573fcf3ce44SJohn Forte 6574fcf3ce44SJohn Forte if (pProps == NULL) 6575fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6576fcf3ce44SJohn Forte 6577fcf3ce44SJohn Forte if (staticDiscoveryTargetOid.objectType != 6578fcf3ce44SJohn Forte IMA_OBJECT_TYPE_STATIC_DISCOVERY_TARGET) 6579fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6580fcf3ce44SJohn Forte 6581fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6582fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6583fcf3ce44SJohn Forte 6584fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6585fcf3ce44SJohn Forte if (plugintable[i].ownerId == 6586fcf3ce44SJohn Forte staticDiscoveryTargetOid.ownerId) { 6587fcf3ce44SJohn Forte 6588fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6589fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6590fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6591fcf3ce44SJohn Forte #ifdef WIN32 6592fcf3ce44SJohn Forte PassFunc = 6593fcf3ce44SJohn Forte (IMA_GetStaticDiscoveryTargetPropertiesFn) 6594fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6595fcf3ce44SJohn Forte "IMA_GetStaticDiscoveryTargetProperties"); 6596fcf3ce44SJohn Forte #else 6597fcf3ce44SJohn Forte PassFunc = 6598fcf3ce44SJohn Forte (IMA_GetStaticDiscoveryTargetPropertiesFn) 6599fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6600fcf3ce44SJohn Forte "IMA_GetStaticDiscoveryTargetProperties"); 6601fcf3ce44SJohn Forte #endif 6602fcf3ce44SJohn Forte 6603fcf3ce44SJohn Forte if (PassFunc != NULL) { 6604fcf3ce44SJohn Forte status = PassFunc( 6605fcf3ce44SJohn Forte staticDiscoveryTargetOid, pProps); 6606fcf3ce44SJohn Forte } 6607fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6608fcf3ce44SJohn Forte } 6609fcf3ce44SJohn Forte 6610fcf3ce44SJohn Forte break; 6611fcf3ce44SJohn Forte } 6612fcf3ce44SJohn Forte } 6613fcf3ce44SJohn Forte os_releasemutex(libMutex); 6614fcf3ce44SJohn Forte return (status); 6615fcf3ce44SJohn Forte } 6616fcf3ce44SJohn Forte 6617fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetDiscoveryAddressOidList( 6618fcf3ce44SJohn Forte IMA_OID Oid, 6619fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 6620fcf3ce44SJohn Forte 6621fcf3ce44SJohn Forte IMA_GetDiscoveryAddressOidListFn PassFunc; 6622fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 6623fcf3ce44SJohn Forte 6624fcf3ce44SJohn Forte IMA_UINT i; 6625fcf3ce44SJohn Forte IMA_UINT j; 6626fcf3ce44SJohn Forte IMA_UINT totalIdCount; 6627fcf3ce44SJohn Forte IMA_STATUS status; 6628fcf3ce44SJohn Forte 6629fcf3ce44SJohn Forte if (number_of_plugins == -1) 6630fcf3ce44SJohn Forte InitLibrary(); 6631fcf3ce44SJohn Forte 6632fcf3ce44SJohn Forte if (ppList == NULL) 6633fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6634fcf3ce44SJohn Forte 6635fcf3ce44SJohn Forte if ((Oid.objectType != IMA_OBJECT_TYPE_LHBA) && 6636fcf3ce44SJohn Forte (Oid.objectType != IMA_OBJECT_TYPE_PNP)) { 6637fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6638fcf3ce44SJohn Forte } 6639fcf3ce44SJohn Forte 6640fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6641fcf3ce44SJohn Forte // Get total id count first 6642fcf3ce44SJohn Forte totalIdCount = 0; 6643fcf3ce44SJohn Forte 6644fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6645fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6646fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 6647fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6648fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6649fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6650fcf3ce44SJohn Forte #ifdef WIN32 6651fcf3ce44SJohn Forte PassFunc = (IMA_GetDiscoveryAddressOidListFn) 6652fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6653fcf3ce44SJohn Forte "IMA_GetDiscoveryAddressOidList"); 6654fcf3ce44SJohn Forte #else 6655fcf3ce44SJohn Forte PassFunc = (IMA_GetDiscoveryAddressOidListFn) 6656fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6657fcf3ce44SJohn Forte "IMA_GetDiscoveryAddressOidList"); 6658fcf3ce44SJohn Forte #endif 6659fcf3ce44SJohn Forte if (PassFunc != NULL) { 6660fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 6661fcf3ce44SJohn Forte status = PassFunc(Oid, &ppOidList); 6662fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 6663fcf3ce44SJohn Forte totalIdCount += 6664fcf3ce44SJohn Forte ppOidList->oidCount; 6665fcf3ce44SJohn Forte #ifdef WIN32 6666fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 6667fcf3ce44SJohn Forte GetProcAddress( 6668fcf3ce44SJohn Forte plugintable[i].hPlugin, 6669fcf3ce44SJohn Forte "IMA_FreeMemory"); 6670fcf3ce44SJohn Forte #else 6671fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 6672fcf3ce44SJohn Forte dlsym( 6673fcf3ce44SJohn Forte plugintable[i].hPlugin, 6674fcf3ce44SJohn Forte "IMA_FreeMemory"); 6675fcf3ce44SJohn Forte #endif 6676fcf3ce44SJohn Forte if (FreeFunc != NULL) { 6677fcf3ce44SJohn Forte FreeFunc(ppOidList); 6678fcf3ce44SJohn Forte } 6679fcf3ce44SJohn Forte } 6680fcf3ce44SJohn Forte } 6681fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6682fcf3ce44SJohn Forte } 6683fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 6684fcf3ce44SJohn Forte break; 6685fcf3ce44SJohn Forte } 6686fcf3ce44SJohn Forte } 6687fcf3ce44SJohn Forte } 6688fcf3ce44SJohn Forte 6689fcf3ce44SJohn Forte *ppList = (IMA_OID_LIST*)calloc(1, sizeof (IMA_OID_LIST) + 6690fcf3ce44SJohn Forte (totalIdCount - 1)* sizeof (IMA_OID)); 6691fcf3ce44SJohn Forte 6692fcf3ce44SJohn Forte if ((*ppList) == NULL) { 6693fcf3ce44SJohn Forte os_releasemutex(libMutex); 6694fcf3ce44SJohn Forte return (IMA_ERROR_UNEXPECTED_OS_ERROR); 6695fcf3ce44SJohn Forte } 6696fcf3ce44SJohn Forte (*ppList)->oidCount = totalIdCount; 6697fcf3ce44SJohn Forte 6698fcf3ce44SJohn Forte // 2nd pass to copy the id lists 6699fcf3ce44SJohn Forte totalIdCount = 0; 6700fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6701fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6702fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 6703fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6704fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6705fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6706fcf3ce44SJohn Forte #ifdef WIN32 6707fcf3ce44SJohn Forte PassFunc = (IMA_GetDiscoveryAddressOidListFn) 6708fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6709fcf3ce44SJohn Forte "IMA_GetDiscoveryAddressOidList"); 6710fcf3ce44SJohn Forte #else 6711fcf3ce44SJohn Forte PassFunc = (IMA_GetDiscoveryAddressOidListFn) 6712fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6713fcf3ce44SJohn Forte "IMA_GetDiscoveryAddressOidList"); 6714fcf3ce44SJohn Forte #endif 6715fcf3ce44SJohn Forte if (PassFunc != NULL) { 6716fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 6717fcf3ce44SJohn Forte status = PassFunc(Oid, &ppOidList); 6718fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 6719fcf3ce44SJohn Forte for (j = 0; 6720fcf3ce44SJohn Forte (j < ppOidList->oidCount) && 6721fcf3ce44SJohn Forte (totalIdCount < 6722fcf3ce44SJohn Forte (*ppList)->oidCount); 6723fcf3ce44SJohn Forte j++) { 6724fcf3ce44SJohn Forte #define OBJ_SEQ_NUM ppOidList->oids[j].objectSequenceNumber 6725fcf3ce44SJohn Forte (*ppList)->oids 6726fcf3ce44SJohn Forte [totalIdCount]. 6727fcf3ce44SJohn Forte objectType = 6728fcf3ce44SJohn Forte ppOidList->oids[j]. 6729fcf3ce44SJohn Forte objectType; 6730fcf3ce44SJohn Forte (*ppList)->oids[ 6731fcf3ce44SJohn Forte totalIdCount]. 6732fcf3ce44SJohn Forte objectSequenceNumber 6733fcf3ce44SJohn Forte = OBJ_SEQ_NUM; 6734fcf3ce44SJohn Forte (*ppList)->oids[ 6735fcf3ce44SJohn Forte totalIdCount]. 6736fcf3ce44SJohn Forte ownerId = 6737fcf3ce44SJohn Forte ppOidList-> 6738fcf3ce44SJohn Forte oids[j].ownerId; 6739fcf3ce44SJohn Forte totalIdCount++; 6740fcf3ce44SJohn Forte #undef OBJ_SEQ_NUM 6741fcf3ce44SJohn Forte } 6742fcf3ce44SJohn Forte #ifdef WIN32 6743fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 6744fcf3ce44SJohn Forte GetProcAddress( 6745fcf3ce44SJohn Forte plugintable[i].hPlugin, 6746fcf3ce44SJohn Forte "IMA_FreeMemory"); 6747fcf3ce44SJohn Forte #else 6748fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 6749fcf3ce44SJohn Forte dlsym( 6750fcf3ce44SJohn Forte plugintable[i].hPlugin, 6751fcf3ce44SJohn Forte "IMA_FreeMemory"); 6752fcf3ce44SJohn Forte #endif 6753fcf3ce44SJohn Forte if (FreeFunc != NULL) { 6754fcf3ce44SJohn Forte FreeFunc(ppOidList); 6755fcf3ce44SJohn Forte } 6756fcf3ce44SJohn Forte } 6757fcf3ce44SJohn Forte } 6758fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6759fcf3ce44SJohn Forte } 6760fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 6761fcf3ce44SJohn Forte free(*ppList); 6762fcf3ce44SJohn Forte break; 6763fcf3ce44SJohn Forte } 6764fcf3ce44SJohn Forte } 6765fcf3ce44SJohn Forte } 6766fcf3ce44SJohn Forte 6767fcf3ce44SJohn Forte os_releasemutex(libMutex); 6768fcf3ce44SJohn Forte return (status); 6769fcf3ce44SJohn Forte 6770fcf3ce44SJohn Forte } 6771fcf3ce44SJohn Forte 6772fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetSessionOidList( 6773fcf3ce44SJohn Forte IMA_OID Oid, 6774fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 6775fcf3ce44SJohn Forte 6776fcf3ce44SJohn Forte IMA_GetSessionOidListFn PassFunc; 6777fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 6778fcf3ce44SJohn Forte 6779fcf3ce44SJohn Forte IMA_UINT i; 6780fcf3ce44SJohn Forte IMA_UINT j; 6781fcf3ce44SJohn Forte IMA_UINT totalIdCount; 6782fcf3ce44SJohn Forte IMA_STATUS status; 6783fcf3ce44SJohn Forte 6784fcf3ce44SJohn Forte if (number_of_plugins == -1) 6785fcf3ce44SJohn Forte InitLibrary(); 6786fcf3ce44SJohn Forte 6787fcf3ce44SJohn Forte if (ppList == NULL) 6788fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6789fcf3ce44SJohn Forte 6790fcf3ce44SJohn Forte if ((Oid.objectType != IMA_OBJECT_TYPE_LHBA) && 6791fcf3ce44SJohn Forte (Oid.objectType != IMA_OBJECT_TYPE_TARGET)) { 6792fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6793fcf3ce44SJohn Forte } 6794fcf3ce44SJohn Forte 6795fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6796fcf3ce44SJohn Forte // Get total id count first 6797fcf3ce44SJohn Forte totalIdCount = 0; 6798fcf3ce44SJohn Forte 6799fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6800fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6801fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 6802fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6803fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6804fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6805fcf3ce44SJohn Forte #ifdef WIN32 6806fcf3ce44SJohn Forte PassFunc = (IMA_GetSessionOidListFn) 6807fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6808fcf3ce44SJohn Forte "IMA_GetSessionOidList"); 6809fcf3ce44SJohn Forte #else 6810fcf3ce44SJohn Forte PassFunc = (IMA_GetSessionOidListFn) 6811fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6812fcf3ce44SJohn Forte "IMA_GetSessionOidList"); 6813fcf3ce44SJohn Forte #endif 6814fcf3ce44SJohn Forte if (PassFunc != NULL) { 6815fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 6816fcf3ce44SJohn Forte status = PassFunc(Oid, &ppOidList); 6817fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 6818fcf3ce44SJohn Forte totalIdCount += 6819fcf3ce44SJohn Forte ppOidList->oidCount; 6820fcf3ce44SJohn Forte #ifdef WIN32 6821fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 6822fcf3ce44SJohn Forte GetProcAddress( 6823fcf3ce44SJohn Forte plugintable[i].hPlugin, 6824fcf3ce44SJohn Forte "IMA_FreeMemory"); 6825fcf3ce44SJohn Forte #else 6826fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 6827fcf3ce44SJohn Forte dlsym( 6828fcf3ce44SJohn Forte plugintable[i].hPlugin, 6829fcf3ce44SJohn Forte "IMA_FreeMemory"); 6830fcf3ce44SJohn Forte #endif 6831fcf3ce44SJohn Forte if (FreeFunc != NULL) { 6832fcf3ce44SJohn Forte FreeFunc(ppOidList); 6833fcf3ce44SJohn Forte } 6834fcf3ce44SJohn Forte } 6835fcf3ce44SJohn Forte 6836fcf3ce44SJohn Forte } 6837fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6838fcf3ce44SJohn Forte } 6839fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 6840fcf3ce44SJohn Forte break; 6841fcf3ce44SJohn Forte } 6842fcf3ce44SJohn Forte } 6843fcf3ce44SJohn Forte } 6844fcf3ce44SJohn Forte 6845fcf3ce44SJohn Forte *ppList = (IMA_OID_LIST*)calloc(1, sizeof (IMA_OID_LIST) + 6846fcf3ce44SJohn Forte (totalIdCount - 1)* sizeof (IMA_OID)); 6847fcf3ce44SJohn Forte 6848fcf3ce44SJohn Forte if ((*ppList) == NULL) { 6849fcf3ce44SJohn Forte os_releasemutex(libMutex); 6850fcf3ce44SJohn Forte return (IMA_ERROR_UNEXPECTED_OS_ERROR); 6851fcf3ce44SJohn Forte } 6852fcf3ce44SJohn Forte (*ppList)->oidCount = totalIdCount; 6853fcf3ce44SJohn Forte 6854fcf3ce44SJohn Forte // 2nd pass to copy the id lists 6855fcf3ce44SJohn Forte totalIdCount = 0; 6856fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6857fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6858fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 6859fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6860fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6861fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6862fcf3ce44SJohn Forte #ifdef WIN32 6863fcf3ce44SJohn Forte PassFunc = (IMA_GetSessionOidListFn) 6864fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6865fcf3ce44SJohn Forte "IMA_GetSessionOidList"); 6866fcf3ce44SJohn Forte #else 6867fcf3ce44SJohn Forte PassFunc = (IMA_GetSessionOidListFn) 6868fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6869fcf3ce44SJohn Forte "IMA_GetSessionOidList"); 6870fcf3ce44SJohn Forte #endif 6871fcf3ce44SJohn Forte if (PassFunc != NULL) { 6872fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 6873fcf3ce44SJohn Forte status = PassFunc(Oid, &ppOidList); 6874fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 6875fcf3ce44SJohn Forte for (j = 0; 6876fcf3ce44SJohn Forte (j < ppOidList->oidCount) && 6877fcf3ce44SJohn Forte (totalIdCount < 6878fcf3ce44SJohn Forte (*ppList)->oidCount); 6879fcf3ce44SJohn Forte j++) { 6880fcf3ce44SJohn Forte 6881fcf3ce44SJohn Forte #define OBJ_SEQ_NUM ppOidList->oids[j].objectSequenceNumber 6882fcf3ce44SJohn Forte (*ppList)->oids[ 6883fcf3ce44SJohn Forte totalIdCount]. 6884fcf3ce44SJohn Forte objectType = 6885fcf3ce44SJohn Forte ppOidList->oids[j]. 6886fcf3ce44SJohn Forte objectType; 6887fcf3ce44SJohn Forte (*ppList)->oids[ 6888fcf3ce44SJohn Forte totalIdCount]. 6889fcf3ce44SJohn Forte objectSequenceNumber 6890fcf3ce44SJohn Forte = OBJ_SEQ_NUM; 6891fcf3ce44SJohn Forte (*ppList)->oids[ 6892fcf3ce44SJohn Forte totalIdCount]. 6893fcf3ce44SJohn Forte ownerId = 6894fcf3ce44SJohn Forte ppOidList->oids[j]. 6895fcf3ce44SJohn Forte ownerId; 6896fcf3ce44SJohn Forte totalIdCount++; 6897fcf3ce44SJohn Forte #undef OBJ_SEQ_NUM 6898fcf3ce44SJohn Forte } 6899fcf3ce44SJohn Forte #ifdef WIN32 6900fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 6901fcf3ce44SJohn Forte GetProcAddress( 6902fcf3ce44SJohn Forte plugintable[i].hPlugin, 6903fcf3ce44SJohn Forte "IMA_FreeMemory"); 6904fcf3ce44SJohn Forte #else 6905fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 6906fcf3ce44SJohn Forte dlsym( 6907fcf3ce44SJohn Forte plugintable[i].hPlugin, 6908fcf3ce44SJohn Forte "IMA_FreeMemory"); 6909fcf3ce44SJohn Forte #endif 6910fcf3ce44SJohn Forte if (FreeFunc != NULL) { 6911fcf3ce44SJohn Forte FreeFunc(ppOidList); 6912fcf3ce44SJohn Forte } 6913fcf3ce44SJohn Forte } 6914fcf3ce44SJohn Forte } 6915fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6916fcf3ce44SJohn Forte } 6917fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 6918fcf3ce44SJohn Forte free(*ppList); 6919fcf3ce44SJohn Forte break; 6920fcf3ce44SJohn Forte } 6921fcf3ce44SJohn Forte } 6922fcf3ce44SJohn Forte } 6923fcf3ce44SJohn Forte 6924fcf3ce44SJohn Forte os_releasemutex(libMutex); 6925fcf3ce44SJohn Forte return (status); 6926fcf3ce44SJohn Forte 6927fcf3ce44SJohn Forte } 6928fcf3ce44SJohn Forte 6929fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetConnectionOidList( 6930fcf3ce44SJohn Forte IMA_OID Oid, 6931fcf3ce44SJohn Forte IMA_OID_LIST **ppList) { 6932fcf3ce44SJohn Forte 6933fcf3ce44SJohn Forte IMA_GetSessionOidListFn PassFunc; 6934fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 6935fcf3ce44SJohn Forte 6936fcf3ce44SJohn Forte IMA_UINT i; 6937fcf3ce44SJohn Forte IMA_UINT j; 6938fcf3ce44SJohn Forte IMA_UINT totalIdCount; 6939fcf3ce44SJohn Forte IMA_STATUS status; 6940fcf3ce44SJohn Forte 6941fcf3ce44SJohn Forte if (number_of_plugins == -1) 6942fcf3ce44SJohn Forte InitLibrary(); 6943fcf3ce44SJohn Forte 6944fcf3ce44SJohn Forte if (ppList == NULL) 6945fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 6946fcf3ce44SJohn Forte 6947fcf3ce44SJohn Forte if (Oid.objectType != IMA_OBJECT_TYPE_SESSION) { 6948fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 6949fcf3ce44SJohn Forte } 6950fcf3ce44SJohn Forte 6951fcf3ce44SJohn Forte os_obtainmutex(libMutex); 6952fcf3ce44SJohn Forte // Get total id count first 6953fcf3ce44SJohn Forte totalIdCount = 0; 6954fcf3ce44SJohn Forte 6955fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 6956fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 6957fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 6958fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 6959fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 6960fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 6961fcf3ce44SJohn Forte #ifdef WIN32 6962fcf3ce44SJohn Forte PassFunc = (IMA_GetConnectionOidListFn) 6963fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 6964fcf3ce44SJohn Forte "IMA_GetConnectionOidList"); 6965fcf3ce44SJohn Forte #else 6966fcf3ce44SJohn Forte PassFunc = (IMA_GetConnectionOidListFn) 6967fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 6968fcf3ce44SJohn Forte "IMA_GetConnectionOidList"); 6969fcf3ce44SJohn Forte #endif 6970fcf3ce44SJohn Forte if (PassFunc != NULL) { 6971fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 6972fcf3ce44SJohn Forte status = PassFunc(Oid, &ppOidList); 6973fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 6974fcf3ce44SJohn Forte totalIdCount += 6975fcf3ce44SJohn Forte ppOidList->oidCount; 6976fcf3ce44SJohn Forte #ifdef WIN32 6977fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 6978fcf3ce44SJohn Forte GetProcAddress( 6979fcf3ce44SJohn Forte plugintable[i].hPlugin, 6980fcf3ce44SJohn Forte "IMA_FreeMemory"); 6981fcf3ce44SJohn Forte #else 6982fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 6983fcf3ce44SJohn Forte dlsym( 6984fcf3ce44SJohn Forte plugintable[i].hPlugin, 6985fcf3ce44SJohn Forte "IMA_FreeMemory"); 6986fcf3ce44SJohn Forte #endif 6987fcf3ce44SJohn Forte if (FreeFunc != NULL) { 6988fcf3ce44SJohn Forte FreeFunc(ppOidList); 6989fcf3ce44SJohn Forte } 6990fcf3ce44SJohn Forte } 6991fcf3ce44SJohn Forte 6992fcf3ce44SJohn Forte } 6993fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 6994fcf3ce44SJohn Forte } 6995fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 6996fcf3ce44SJohn Forte break; 6997fcf3ce44SJohn Forte } 6998fcf3ce44SJohn Forte } 6999fcf3ce44SJohn Forte } 7000fcf3ce44SJohn Forte 7001fcf3ce44SJohn Forte 7002fcf3ce44SJohn Forte *ppList = (IMA_OID_LIST*)calloc(1, sizeof (IMA_OID_LIST) 7003fcf3ce44SJohn Forte + (totalIdCount - 1)* sizeof (IMA_OID)); 7004fcf3ce44SJohn Forte 7005fcf3ce44SJohn Forte if ((*ppList) == NULL) { 7006fcf3ce44SJohn Forte os_releasemutex(libMutex); 7007fcf3ce44SJohn Forte return (IMA_ERROR_UNEXPECTED_OS_ERROR); 7008fcf3ce44SJohn Forte } 7009fcf3ce44SJohn Forte (*ppList)->oidCount = totalIdCount; 7010fcf3ce44SJohn Forte 7011fcf3ce44SJohn Forte // 2nd pass to copy the id lists 7012fcf3ce44SJohn Forte totalIdCount = 0; 7013fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 7014fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 7015fcf3ce44SJohn Forte if (plugintable[i].ownerId == Oid.ownerId) { 7016fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 7017fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 7018fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 7019fcf3ce44SJohn Forte #ifdef WIN32 7020fcf3ce44SJohn Forte PassFunc = (IMA_GetConnectionOidListFn) 7021fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 7022fcf3ce44SJohn Forte "IMA_GetConnectionOidList"); 7023fcf3ce44SJohn Forte #else 7024fcf3ce44SJohn Forte PassFunc = (IMA_GetConnectionOidListFn) 7025fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 7026fcf3ce44SJohn Forte "IMA_GetConnectionOidList"); 7027fcf3ce44SJohn Forte #endif 7028fcf3ce44SJohn Forte if (PassFunc != NULL) { 7029fcf3ce44SJohn Forte IMA_OID_LIST *ppOidList; 7030fcf3ce44SJohn Forte status = PassFunc(Oid, &ppOidList); 7031fcf3ce44SJohn Forte if (status == IMA_STATUS_SUCCESS) { 7032fcf3ce44SJohn Forte for (j = 0; ( 7033fcf3ce44SJohn Forte j < ppOidList->oidCount) && 7034fcf3ce44SJohn Forte (totalIdCount < 7035fcf3ce44SJohn Forte (*ppList)->oidCount); 7036fcf3ce44SJohn Forte j++) { 7037fcf3ce44SJohn Forte #define OBJ_SEQ_NUM ppOidList->oids[j].objectSequenceNumber 7038fcf3ce44SJohn Forte (*ppList)-> 7039fcf3ce44SJohn Forte oids[totalIdCount]. 7040fcf3ce44SJohn Forte objectType = 7041fcf3ce44SJohn Forte ppOidList-> 7042fcf3ce44SJohn Forte oids[j].objectType; 7043fcf3ce44SJohn Forte (*ppList)-> 7044fcf3ce44SJohn Forte oids[totalIdCount]. 7045fcf3ce44SJohn Forte objectSequenceNumber 7046fcf3ce44SJohn Forte = OBJ_SEQ_NUM; 7047fcf3ce44SJohn Forte (*ppList)-> 7048fcf3ce44SJohn Forte oids[totalIdCount]. 7049fcf3ce44SJohn Forte ownerId = 7050fcf3ce44SJohn Forte ppOidList->oids[j]. 7051fcf3ce44SJohn Forte ownerId; 7052fcf3ce44SJohn Forte totalIdCount++; 7053fcf3ce44SJohn Forte #undef OBJ_SEQ_NUM 7054fcf3ce44SJohn Forte } 7055fcf3ce44SJohn Forte #ifdef WIN32 7056fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 7057fcf3ce44SJohn Forte GetProcAddress( 7058fcf3ce44SJohn Forte plugintable[i].hPlugin, 7059fcf3ce44SJohn Forte "IMA_FreeMemory"); 7060fcf3ce44SJohn Forte #else 7061fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 7062fcf3ce44SJohn Forte dlsym( 7063fcf3ce44SJohn Forte plugintable[i].hPlugin, 7064fcf3ce44SJohn Forte "IMA_FreeMemory"); 7065fcf3ce44SJohn Forte #endif 7066fcf3ce44SJohn Forte if (FreeFunc != NULL) { 7067fcf3ce44SJohn Forte FreeFunc(ppOidList); 7068fcf3ce44SJohn Forte } 7069fcf3ce44SJohn Forte } 7070fcf3ce44SJohn Forte } 7071fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 7072fcf3ce44SJohn Forte } 7073fcf3ce44SJohn Forte if (status != IMA_STATUS_SUCCESS) { 7074fcf3ce44SJohn Forte free(*ppList); 7075fcf3ce44SJohn Forte break; 7076fcf3ce44SJohn Forte } 7077fcf3ce44SJohn Forte } 7078fcf3ce44SJohn Forte } 7079fcf3ce44SJohn Forte os_releasemutex(libMutex); 7080fcf3ce44SJohn Forte return (status); 7081fcf3ce44SJohn Forte 7082fcf3ce44SJohn Forte } 7083fcf3ce44SJohn Forte 7084fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_RemoveDiscoveryAddress( 7085fcf3ce44SJohn Forte IMA_OID discoveryAddressOid) { 7086fcf3ce44SJohn Forte 7087fcf3ce44SJohn Forte IMA_RemoveDiscoveryAddressFn PassFunc; 7088fcf3ce44SJohn Forte IMA_UINT i; 7089fcf3ce44SJohn Forte IMA_STATUS status; 7090fcf3ce44SJohn Forte 7091fcf3ce44SJohn Forte if (number_of_plugins == -1) 7092fcf3ce44SJohn Forte InitLibrary(); 7093fcf3ce44SJohn Forte 7094fcf3ce44SJohn Forte if (discoveryAddressOid.objectType != 7095fcf3ce44SJohn Forte IMA_OBJECT_TYPE_DISCOVERY_ADDRESS) { 7096fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 7097fcf3ce44SJohn Forte } 7098fcf3ce44SJohn Forte 7099fcf3ce44SJohn Forte os_obtainmutex(libMutex); 7100fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 7101fcf3ce44SJohn Forte 7102fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 7103fcf3ce44SJohn Forte if (plugintable[i].ownerId == discoveryAddressOid.ownerId) { 7104fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 7105fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 7106fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 7107fcf3ce44SJohn Forte #ifdef WIN32 7108fcf3ce44SJohn Forte PassFunc = (IMA_RemoveDiscoveryAddressFn) 7109fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 7110fcf3ce44SJohn Forte "IMA_RemoveDiscoveryAddress"); 7111fcf3ce44SJohn Forte #else 7112fcf3ce44SJohn Forte PassFunc = (IMA_RemoveDiscoveryAddressFn) 7113fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 7114fcf3ce44SJohn Forte "IMA_RemoveDiscoveryAddress"); 7115fcf3ce44SJohn Forte #endif 7116fcf3ce44SJohn Forte 7117fcf3ce44SJohn Forte if (PassFunc != NULL) { 7118fcf3ce44SJohn Forte status = PassFunc(discoveryAddressOid); 7119fcf3ce44SJohn Forte } 7120fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 7121fcf3ce44SJohn Forte } 7122fcf3ce44SJohn Forte 7123fcf3ce44SJohn Forte break; 7124fcf3ce44SJohn Forte } 7125fcf3ce44SJohn Forte } 7126fcf3ce44SJohn Forte os_releasemutex(libMutex); 7127fcf3ce44SJohn Forte return (status); 7128fcf3ce44SJohn Forte } 7129fcf3ce44SJohn Forte 7130fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetIpsecProperties( 7131fcf3ce44SJohn Forte IMA_OID oid, 7132fcf3ce44SJohn Forte IMA_IPSEC_PROPERTIES *pProps) { 7133fcf3ce44SJohn Forte IMA_GetIpsecPropertiesFn PassFunc; 7134fcf3ce44SJohn Forte IMA_UINT i; 7135fcf3ce44SJohn Forte IMA_STATUS status; 7136fcf3ce44SJohn Forte 7137fcf3ce44SJohn Forte if (number_of_plugins == -1) 7138fcf3ce44SJohn Forte InitLibrary(); 7139fcf3ce44SJohn Forte 7140fcf3ce44SJohn Forte if (pProps == NULL) 7141fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 7142fcf3ce44SJohn Forte 7143fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_PNP && 7144fcf3ce44SJohn Forte oid.objectType != IMA_OBJECT_TYPE_LHBA) { 7145fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 7146fcf3ce44SJohn Forte } 7147fcf3ce44SJohn Forte 7148fcf3ce44SJohn Forte os_obtainmutex(libMutex); 7149fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 7150fcf3ce44SJohn Forte 7151fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 7152fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 7153fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 7154fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 7155fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 7156fcf3ce44SJohn Forte #ifdef WIN32 7157fcf3ce44SJohn Forte PassFunc = (IMA_GetIpsecPropertiesFn) 7158fcf3ce44SJohn Forte GetProcAddress(plugintable[i].hPlugin, 7159fcf3ce44SJohn Forte "IMA_GetIpsecProperties"); 7160fcf3ce44SJohn Forte #else 7161fcf3ce44SJohn Forte PassFunc = (IMA_GetIpsecPropertiesFn) 7162fcf3ce44SJohn Forte dlsym(plugintable[i].hPlugin, 7163fcf3ce44SJohn Forte "IMA_GetIpsecProperties"); 7164fcf3ce44SJohn Forte #endif 7165fcf3ce44SJohn Forte 7166fcf3ce44SJohn Forte if (PassFunc != NULL) { 7167fcf3ce44SJohn Forte status = PassFunc(oid, pProps); 7168fcf3ce44SJohn Forte } 7169fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 7170fcf3ce44SJohn Forte } 7171fcf3ce44SJohn Forte 7172fcf3ce44SJohn Forte break; 7173fcf3ce44SJohn Forte } 7174fcf3ce44SJohn Forte } 7175fcf3ce44SJohn Forte os_releasemutex(libMutex); 7176fcf3ce44SJohn Forte return (status); 7177fcf3ce44SJohn Forte } 7178fcf3ce44SJohn Forte 7179fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetAddressKeys( 7180fcf3ce44SJohn Forte IMA_OID targetOid, 7181fcf3ce44SJohn Forte IMA_ADDRESS_KEYS **ppKeys) { 7182fcf3ce44SJohn Forte IMA_GetAddressKeysFn PassFunc; 7183fcf3ce44SJohn Forte IMA_FreeMemoryFn FreeFunc; 7184fcf3ce44SJohn Forte 7185fcf3ce44SJohn Forte IMA_STATUS status; 7186fcf3ce44SJohn Forte IMA_UINT i; 7187fcf3ce44SJohn Forte 7188fcf3ce44SJohn Forte 7189fcf3ce44SJohn Forte if (number_of_plugins == -1) 7190fcf3ce44SJohn Forte InitLibrary(); 7191fcf3ce44SJohn Forte 7192fcf3ce44SJohn Forte if (ppKeys == NULL) 7193fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 7194fcf3ce44SJohn Forte 7195fcf3ce44SJohn Forte if (targetOid.objectType != IMA_OBJECT_TYPE_TARGET) 7196fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 7197fcf3ce44SJohn Forte 7198fcf3ce44SJohn Forte os_obtainmutex(libMutex); 7199fcf3ce44SJohn Forte 7200fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 7201fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 7202fcf3ce44SJohn Forte 7203fcf3ce44SJohn Forte if (plugintable[i].ownerId == targetOid.ownerId) { 7204fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 7205fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 7206fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 7207fcf3ce44SJohn Forte #ifdef WIN32 7208fcf3ce44SJohn Forte PassFunc = 7209fcf3ce44SJohn Forte (IMA_GetAddressKeysFn) GetProcAddress( 7210fcf3ce44SJohn Forte plugintable[i].hPlugin, 7211fcf3ce44SJohn Forte "IMA_GetAddressKeys"); 7212fcf3ce44SJohn Forte #else 7213fcf3ce44SJohn Forte PassFunc = (IMA_GetAddressKeysFn) dlsym( 7214fcf3ce44SJohn Forte plugintable[i].hPlugin, 7215fcf3ce44SJohn Forte "IMA_GetAddressKeys"); 7216fcf3ce44SJohn Forte #endif 7217fcf3ce44SJohn Forte 7218fcf3ce44SJohn Forte if (PassFunc != NULL) { 7219fcf3ce44SJohn Forte IMA_ADDRESS_KEYS *ppKeysList; 7220fcf3ce44SJohn Forte IMA_UINT addrSize; 7221fcf3ce44SJohn Forte addrSize = sizeof (IMA_ADDRESS_KEYS); 7222fcf3ce44SJohn Forte status = 7223fcf3ce44SJohn Forte PassFunc(targetOid, &ppKeysList); 7224fcf3ce44SJohn Forte if (IMA_SUCCESS(status)) { 7225fcf3ce44SJohn Forte 7226fcf3ce44SJohn Forte *ppKeys = 7227fcf3ce44SJohn Forte (IMA_ADDRESS_KEYS*)calloc(1, 7228fcf3ce44SJohn Forte addrSize + 7229fcf3ce44SJohn Forte (ppKeysList->addressKeyCount 7230fcf3ce44SJohn Forte - 1) * addrSize); 7231fcf3ce44SJohn Forte if ((*ppKeys) == NULL) { 7232fcf3ce44SJohn Forte status = EUOS_ERROR; 7233fcf3ce44SJohn Forte } else { 7234fcf3ce44SJohn Forte memcpy((*ppKeys), 7235fcf3ce44SJohn Forte ppKeysList, 7236fcf3ce44SJohn Forte addrSize + 7237fcf3ce44SJohn Forte (ppKeysList-> 7238fcf3ce44SJohn Forte addressKeyCount-1)* 7239fcf3ce44SJohn Forte addrSize); 7240fcf3ce44SJohn Forte 7241fcf3ce44SJohn Forte } 7242fcf3ce44SJohn Forte #ifdef WIN32 7243fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 7244fcf3ce44SJohn Forte GetProcAddress( 7245fcf3ce44SJohn Forte plugintable[i].hPlugin, 7246fcf3ce44SJohn Forte "IMA_FreeMemory"); 7247fcf3ce44SJohn Forte #else 7248fcf3ce44SJohn Forte FreeFunc = (IMA_FreeMemoryFn) 7249fcf3ce44SJohn Forte dlsym( 7250fcf3ce44SJohn Forte plugintable[i].hPlugin, 7251fcf3ce44SJohn Forte "IMA_FreeMemory"); 7252fcf3ce44SJohn Forte #endif 7253fcf3ce44SJohn Forte if (FreeFunc != NULL) { 7254fcf3ce44SJohn Forte FreeFunc(ppKeysList); 7255fcf3ce44SJohn Forte } 7256fcf3ce44SJohn Forte } 7257fcf3ce44SJohn Forte } 7258fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 7259fcf3ce44SJohn Forte } 7260fcf3ce44SJohn Forte 7261fcf3ce44SJohn Forte break; 7262fcf3ce44SJohn Forte } 7263fcf3ce44SJohn Forte } 7264fcf3ce44SJohn Forte os_releasemutex(libMutex); 7265fcf3ce44SJohn Forte return (status); 7266fcf3ce44SJohn Forte } 7267fcf3ce44SJohn Forte 7268fcf3ce44SJohn Forte IMA_API IMA_STATUS IMA_GetDiscoveryAddressProperties( 7269fcf3ce44SJohn Forte IMA_OID oid, 7270fcf3ce44SJohn Forte IMA_DISCOVERY_ADDRESS_PROPERTIES *pProps) { 7271fcf3ce44SJohn Forte 7272fcf3ce44SJohn Forte IMA_GetDiscoveryAddressPropertiesFn PassFunc; 7273fcf3ce44SJohn Forte IMA_UINT i; 7274fcf3ce44SJohn Forte IMA_STATUS status; 7275fcf3ce44SJohn Forte 7276fcf3ce44SJohn Forte if (number_of_plugins == -1) 7277fcf3ce44SJohn Forte InitLibrary(); 7278fcf3ce44SJohn Forte 7279fcf3ce44SJohn Forte if (pProps == NULL) 7280fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 7281fcf3ce44SJohn Forte 7282fcf3ce44SJohn Forte if (oid.objectType != IMA_OBJECT_TYPE_DISCOVERY_ADDRESS) 7283fcf3ce44SJohn Forte return (IMA_ERROR_INCORRECT_OBJECT_TYPE); 7284fcf3ce44SJohn Forte 7285fcf3ce44SJohn Forte os_obtainmutex(libMutex); 7286fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 7287fcf3ce44SJohn Forte 7288fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 7289fcf3ce44SJohn Forte if (plugintable[i].ownerId == oid.ownerId) { 7290fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 7291fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 7292fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 7293fcf3ce44SJohn Forte #ifdef WIN32 7294fcf3ce44SJohn Forte PassFunc = 7295fcf3ce44SJohn Forte (IMA_GetDiscoveryAddressPropertiesFn) 7296fcf3ce44SJohn Forte GetProcAddress( 7297fcf3ce44SJohn Forte plugintable[i].hPlugin, 7298fcf3ce44SJohn Forte "IMA_GetDiscoveryAddressProperties"); 7299fcf3ce44SJohn Forte #else 7300fcf3ce44SJohn Forte PassFunc = 7301fcf3ce44SJohn Forte (IMA_GetDiscoveryAddressPropertiesFn) dlsym( 7302fcf3ce44SJohn Forte plugintable[i].hPlugin, 7303fcf3ce44SJohn Forte "IMA_GetDiscoveryAddressProperties"); 7304fcf3ce44SJohn Forte #endif 7305fcf3ce44SJohn Forte 7306fcf3ce44SJohn Forte if (PassFunc != NULL) { 7307fcf3ce44SJohn Forte status = PassFunc(oid, pProps); 7308fcf3ce44SJohn Forte } 7309fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 7310fcf3ce44SJohn Forte } 7311fcf3ce44SJohn Forte 7312fcf3ce44SJohn Forte break; 7313fcf3ce44SJohn Forte } 7314fcf3ce44SJohn Forte } 7315fcf3ce44SJohn Forte os_releasemutex(libMutex); 7316fcf3ce44SJohn Forte return (status); 7317fcf3ce44SJohn Forte } 7318fcf3ce44SJohn Forte 7319fcf3ce44SJohn Forte IMA_API IMA_STATUS QIMA_SetUpdateInterval( 7320fcf3ce44SJohn Forte IMA_OID pluginOid, time_t interval) { 7321fcf3ce44SJohn Forte QIMA_SetUpdateIntervalFn updFunc; 7322fcf3ce44SJohn Forte IMA_UINT i; 7323fcf3ce44SJohn Forte IMA_STATUS status; 7324fcf3ce44SJohn Forte 7325fcf3ce44SJohn Forte if (number_of_plugins == -1) 7326fcf3ce44SJohn Forte InitLibrary(); 7327fcf3ce44SJohn Forte 7328fcf3ce44SJohn Forte if (interval <= 1) 7329fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 7330fcf3ce44SJohn Forte 7331fcf3ce44SJohn Forte if ((pluginOid.objectType != IMA_OBJECT_TYPE_PLUGIN) || 7332fcf3ce44SJohn Forte (pluginOid.objectSequenceNumber != 0)) 7333fcf3ce44SJohn Forte return (IMA_ERROR_INVALID_PARAMETER); 7334fcf3ce44SJohn Forte 7335fcf3ce44SJohn Forte os_obtainmutex(libMutex); 7336fcf3ce44SJohn Forte status = IMA_ERROR_OBJECT_NOT_FOUND; 7337fcf3ce44SJohn Forte 7338fcf3ce44SJohn Forte for (i = 0; i < number_of_plugins; i++) { 7339fcf3ce44SJohn Forte if (plugintable[i].ownerId == pluginOid.ownerId) { 7340fcf3ce44SJohn Forte status = IMA_ERROR_UNEXPECTED_OS_ERROR; 7341fcf3ce44SJohn Forte if (plugintable[i].hPlugin != NULL) { 7342fcf3ce44SJohn Forte os_obtainmutex(plugintable[i].pluginMutex); 7343fcf3ce44SJohn Forte #ifdef WIN32 7344fcf3ce44SJohn Forte updFunc = (QIMA_SetUpdateIntervalFn) 7345fcf3ce44SJohn Forte GetProcAddress( 7346fcf3ce44SJohn Forte plugintable[i].hPlugin, 7347fcf3ce44SJohn Forte "QIMA_SetUpdateInterval"); 7348fcf3ce44SJohn Forte #else 7349fcf3ce44SJohn Forte updFunc = (QIMA_SetUpdateIntervalFn) dlsym( 7350fcf3ce44SJohn Forte plugintable[i].hPlugin, 7351fcf3ce44SJohn Forte "QIMA_SetUpdateInterval"); 7352fcf3ce44SJohn Forte #endif 7353fcf3ce44SJohn Forte 7354fcf3ce44SJohn Forte if (updFunc != NULL) { 7355fcf3ce44SJohn Forte status = updFunc(pluginOid, interval); 7356fcf3ce44SJohn Forte } 7357fcf3ce44SJohn Forte os_releasemutex(plugintable[i].pluginMutex); 7358fcf3ce44SJohn Forte } 7359fcf3ce44SJohn Forte 7360fcf3ce44SJohn Forte break; 7361fcf3ce44SJohn Forte } 7362fcf3ce44SJohn Forte } 7363fcf3ce44SJohn Forte os_releasemutex(libMutex); 7364fcf3ce44SJohn Forte return (status); 7365fcf3ce44SJohn Forte 7366fcf3ce44SJohn Forte } 7367