ZFCP HBA API Library  1
vlib.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: EPL-1.0 */
2 /*
3  * Copyright IBM Corp. 2003,2010
4  *
5  * Authors: Andreas Herrmann
6  * Stefan Voelkel
7  * Sven Schuetz <sven@de.ibm.com>
8  *
9  * File: vlib.h
10  *
11  * Description:
12  * Contains typedefs, structure definitions, some inline functions and macros
13  * needed in the library.
14  *
15  */
16 
17 #ifndef _VLIB_H_
18 #define _VLIB_H_
19 
123 #include "config.h"
124 
126 #define _GNU_SOURCE
127 
128 #include <execinfo.h>
129 #include <stdlib.h>
130 #include <string.h>
131 #include <stdarg.h>
132 #include <unistd.h>
133 #include <stdio.h>
134 #include <sys/types.h>
135 #include <sys/stat.h>
136 #include <sys/ioctl.h>
137 #include <sys/time.h>
138 #include <fcntl.h>
139 #include <signal.h>
140 #include <errno.h>
141 #include <pthread.h>
142 #include <signal.h>
143 #include <time.h>
144 #include <stdint.h>
145 #include <dirent.h>
146 #include <sys/socket.h>
147 #include <linux/netlink.h>
148 #include <scsi/scsi_netlink_fc.h>
149 #include <dirent.h>
150 
151 #include <hbaapi.h>
152 
153 
154 #ifdef HBAAPI_VENDOR_LIB /* compile as vendor specific library */
155 /*
156  * prototypes for vendor libraries
157  */
158 
159 /* library control */
160 typedef HBA_UINT32(*HBAGetVersionFunc)(void);
161 typedef HBA_STATUS(*HBALoadLibraryFunc)(void);
162 typedef HBA_STATUS(*HBAFreeLibraryFunc)(void);
163 typedef HBA_UINT32(*HBAGetVendorLibraryAttributesFunc)(HBA_LIBRARYATTRIBUTES *);
164 typedef HBA_UINT32(*HBAGetNumberOfAdaptersFunc)(void);
165 typedef void(*HBARefreshInformationFunc)(HBA_HANDLE);
166 typedef void(*HBARefreshAdapterConfigurationFunc)(void);
167 typedef void(*HBAResetStatisticsFunc)(HBA_HANDLE, HBA_UINT32);
168 
169 /* adapter and port information */
170 typedef HBA_STATUS(*HBAGetAdapterNameFunc)(HBA_UINT32, char *);
171 typedef HBA_HANDLE(*HBAOpenAdapterFunc)(char *);
172 typedef HBA_STATUS(*HBAOpenAdapterByWWNFunc)(HBA_HANDLE *, HBA_WWN);
173 typedef void(*HBACloseAdapterFunc)(HBA_HANDLE);
174 typedef HBA_STATUS(*HBAGetAdapterAttributesFunc)
175  (HBA_HANDLE, HBA_ADAPTERATTRIBUTES *);
176 typedef HBA_STATUS(*HBAGetAdapterPortAttributesFunc)
177  (HBA_HANDLE, HBA_UINT32, HBA_PORTATTRIBUTES *);
178 typedef HBA_STATUS(*HBAGetDiscoveredPortAttributesFunc)
179  (HBA_HANDLE, HBA_UINT32, HBA_UINT32, HBA_PORTATTRIBUTES *);
180 typedef HBA_STATUS(*HBAGetPortAttributesByWWNFunc)
181  (HBA_HANDLE, HBA_WWN, HBA_PORTATTRIBUTES *);
182 typedef HBA_STATUS(*HBAGetPortStatisticsFunc)
183  (HBA_HANDLE, HBA_UINT32, HBA_PORTSTATISTICS *);
184 typedef HBA_STATUS(*HBAGetFC4StatisticsFunc)
185  (HBA_HANDLE, HBA_WWN, HBA_UINT8, HBA_FC4STATISTICS *);
186 
187 /* FCP information */
188 typedef HBA_STATUS(*HBAGetBindingCapabilityFunc)
189  (HBA_HANDLE, HBA_WWN, HBA_BIND_CAPABILITY *);
190 typedef HBA_STATUS(*HBAGetBindingSupportFunc)
191  (HBA_HANDLE, HBA_WWN, HBA_BIND_CAPABILITY *);
192 typedef HBA_STATUS(*HBASetBindingSupportFunc)
193  (HBA_HANDLE, HBA_WWN, HBA_BIND_CAPABILITY);
194 typedef HBA_STATUS(*HBAGetFcpTargetMappingFunc)
195  (HBA_HANDLE, HBA_FCPTARGETMAPPING *);
196 typedef HBA_STATUS(*HBAGetFcpTargetMappingV2Func)
197  (HBA_HANDLE, HBA_WWN, HBA_FCPTARGETMAPPINGV2 *);
198 typedef HBA_STATUS(*HBAGetFcpPersistentBindingFunc)
199  (HBA_HANDLE, HBA_FCPBINDING *);
200 typedef HBA_STATUS(*HBAGetPersistentBindingV2Func)
201  (HBA_HANDLE, HBA_WWN, HBA_FCPBINDING2 *);
202 typedef HBA_STATUS(*HBASetPersistentBindingV2Func)
203  (HBA_HANDLE, HBA_WWN, HBA_FCPBINDING2 *);
204 typedef HBA_STATUS(*HBARemovePersistentBindingFunc)
205  (HBA_HANDLE, HBA_WWN, HBA_FCPBINDING2 *);
206 typedef HBA_STATUS(*HBARemoveAllPersistentBindingsFunc)(HBA_HANDLE, HBA_WWN);
207 typedef HBA_STATUS(*HBAGetFCPStatisticsFunc)
208  (HBA_HANDLE, const HBA_SCSIID *, HBA_FC4STATISTICS *);
209 
210 /* SCSI information */
211 typedef HBA_STATUS(*HBASendScsiInquiryFunc)
212  (HBA_HANDLE, HBA_WWN, HBA_UINT64, HBA_UINT8, HBA_UINT32, void *,
213  HBA_UINT32, void *, HBA_UINT32);
214 typedef HBA_STATUS(*HBAScsiInquiryV2Func)
215  (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT64, HBA_UINT8, HBA_UINT8, void *,
216  HBA_UINT32 *, HBA_UINT8 *, void *, HBA_UINT32 *);
217 typedef HBA_STATUS(*HBASendReportLUNsFunc)
218  (HBA_HANDLE, HBA_WWN, void *, HBA_UINT32, void *, HBA_UINT32);
219 typedef HBA_STATUS(*HBAScsiReportLUNsV2Func)
220  (HBA_HANDLE, HBA_WWN, HBA_WWN, void *, HBA_UINT32 *, HBA_UINT8 *, void *,
221  HBA_UINT32 *);
222 typedef HBA_STATUS(*HBASendReadCapacityFunc)
223  (HBA_HANDLE, HBA_WWN, HBA_UINT64, void *, HBA_UINT32, void *, HBA_UINT32);
224 typedef HBA_STATUS(*HBAScsiReadCapacityV2Func)
225  (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT64, void *, HBA_UINT32 *,
226  HBA_UINT8 *, void *, HBA_UINT32 *);
227 
228 /* fabric management */
229 typedef HBA_STATUS(*HBASendCTPassThruFunc)
230  (HBA_HANDLE, void *, HBA_UINT32, void *, HBA_UINT32);
231 typedef HBA_STATUS(*HBASendCTPassThruV2Func)
232  (HBA_HANDLE, HBA_WWN, void *, HBA_UINT32, void *, HBA_UINT32 *);
233 typedef HBA_STATUS(*HBASetRNIDMgmtInfoFunc)(HBA_HANDLE, HBA_MGMTINFO *);
234 typedef HBA_STATUS(*HBAGetRNIDMgmtInfoFunc)(HBA_HANDLE, HBA_MGMTINFO *);
235 typedef HBA_STATUS(*HBASendRNIDFunc)
236  (HBA_HANDLE, HBA_WWN, HBA_WWNTYPE, void *, HBA_UINT32 *);
237 typedef HBA_STATUS(*HBASendRNIDV2Func)
238  (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, HBA_UINT32, void *,
239  HBA_UINT32 *);
240 typedef HBA_STATUS(*HBASendRPLFunc)
241  (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, HBA_UINT32, void *,
242  HBA_UINT32 *);
243 typedef HBA_STATUS(*HBASendRPSFunc)
244  (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, HBA_WWN, HBA_UINT32, void *,
245  HBA_UINT32 *);
246 typedef HBA_STATUS(*HBASendSRLFunc)
247  (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, void *, HBA_UINT32 *);
248 typedef HBA_STATUS(*HBASendLIRRFunc)
249  (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT8, HBA_UINT8, void *, HBA_UINT32 *);
250 typedef HBA_STATUS(*HBASendRLSFunc)
251  (HBA_HANDLE, HBA_WWN, HBA_WWN, void *, HBA_UINT32 *);
252 
253 /* event handling */
254 typedef HBA_STATUS(*HBAGetEventBufferFunc)
255  (HBA_HANDLE, HBA_EVENTINFO *, HBA_UINT32 *);
256 typedef HBA_STATUS(*HBARegisterForAdapterAddEventsFunc)
257  (void (*)(void *, HBA_WWN, HBA_UINT32), void *, HBA_CALLBACKHANDLE *);
258 typedef HBA_STATUS(*HBARegisterForAdapterEventsFunc)
259  (void (*)(void *, HBA_WWN, HBA_UINT32), void *, HBA_HANDLE,
260  HBA_CALLBACKHANDLE *);
261 typedef HBA_STATUS(*HBARegisterForAdapterPortEventsFunc)
262  (void (*)(void *, HBA_WWN, HBA_UINT32, HBA_UINT32), void *, HBA_HANDLE,
263  HBA_WWN, HBA_CALLBACKHANDLE *);
264 typedef HBA_STATUS(*HBARegisterForAdapterPortStatEventsFunc)
265  (void (*)(void *, HBA_WWN, HBA_UINT32), void *, HBA_HANDLE, HBA_WWN,
266  HBA_PORTSTATISTICS, HBA_UINT32, HBA_CALLBACKHANDLE *);
267 typedef HBA_STATUS(*HBARegisterForTargetEventsFunc)
268  (void (*)(void *, HBA_WWN, HBA_WWN, HBA_UINT32), void *, HBA_HANDLE,
269  HBA_WWN, HBA_WWN, HBA_CALLBACKHANDLE *, HBA_UINT32);
270 typedef HBA_STATUS(*HBARegisterForLinkEventsFunc)
271  (void (*)(void *, HBA_WWN, HBA_UINT32, void *, HBA_UINT32), void *,
272  void *, HBA_UINT32, HBA_HANDLE, HBA_CALLBACKHANDLE *);
273 typedef HBA_STATUS(*HBARemoveCallbackFunc)(HBA_CALLBACKHANDLE);
274 
275 /* libraries with support for HBA API Phase 1 and 2 must provide both structs,
276  HBA_EntryPoints and HBA_EntryPoints2 */
277 typedef struct HBA_EntryPoints {
278  HBAGetVersionFunc GetVersionHandler;
279  HBALoadLibraryFunc LoadLibraryHandler;
280  HBAFreeLibraryFunc FreeLibraryHandler;
281  HBAGetNumberOfAdaptersFunc GetNumberOfAdaptersHandler;
282  HBAGetAdapterNameFunc GetAdapterNameHandler;
283  HBAOpenAdapterFunc OpenAdapterHandler;
284  HBACloseAdapterFunc CloseAdapterHandler;
285  HBAGetAdapterAttributesFunc GetAdapterAttributesHandler;
286  HBAGetAdapterPortAttributesFunc GetAdapterPortAttributesHandler;
287  HBAGetPortStatisticsFunc GetPortStatisticsHandler;
288  HBAGetDiscoveredPortAttributesFunc
289  GetDiscoveredPortAttributesHandler;
290  HBAGetPortAttributesByWWNFunc GetPortAttributesByWWNHandler;
291  HBASendCTPassThruFunc SendCTPassThruHandler;
292  HBARefreshInformationFunc RefreshInformationHandler;
293  HBAResetStatisticsFunc ResetStatisticsHandler;
294  HBAGetFcpTargetMappingFunc GetFcpTargetMappingHandler;
295  HBAGetFcpPersistentBindingFunc GetFcpPersistentBindingHandler;
296  HBAGetEventBufferFunc GetEventBufferHandler;
297  HBASetRNIDMgmtInfoFunc SetRNIDMgmtInfoHandler;
298  HBAGetRNIDMgmtInfoFunc GetRNIDMgmtInfoHandler;
299  HBASendRNIDFunc SendRNIDHandler;
300  HBASendScsiInquiryFunc ScsiInquiryHandler;
301  HBASendReportLUNsFunc ReportLUNsHandler;
302  HBASendReadCapacityFunc ReadCapacityHandler;
303 } HBA_ENTRYPOINTS;
304 
305 HBA_STATUS HBA_RegisterLibrary(HBA_ENTRYPOINTS *);
306 
307 typedef struct HBA_EntryPointsV2 {
308  HBAGetVersionFunc GetVersionHandler;
309  HBALoadLibraryFunc LoadLibraryHandler;
310  HBAFreeLibraryFunc FreeLibraryHandler;
311  HBAGetNumberOfAdaptersFunc GetNumberOfAdaptersHandler;
312  HBAGetAdapterNameFunc GetAdapterNameHandler;
313  HBAOpenAdapterFunc OpenAdapterHandler;
314  HBACloseAdapterFunc CloseAdapterHandler;
315  HBAGetAdapterAttributesFunc GetAdapterAttributesHandler;
316  HBAGetAdapterPortAttributesFunc GetAdapterPortAttributesHandler;
317  HBAGetPortStatisticsFunc GetPortStatisticsHandler;
318  HBAGetDiscoveredPortAttributesFunc
319  GetDiscoveredPortAttributesHandler;
320  HBAGetPortAttributesByWWNFunc GetPortAttributesByWWNHandler;
321  HBASendCTPassThruFunc SendCTPassThruHandler;
322  HBARefreshInformationFunc RefreshInformationHandler;
323  HBAResetStatisticsFunc ResetStatisticsHandler;
324  HBAGetFcpTargetMappingFunc GetFcpTargetMappingHandler;
325  HBAGetFcpPersistentBindingFunc GetFcpPersistentBindingHandler;
326  HBAGetEventBufferFunc GetEventBufferHandler;
327  HBASetRNIDMgmtInfoFunc SetRNIDMgmtInfoHandler;
328  HBAGetRNIDMgmtInfoFunc GetRNIDMgmtInfoHandler;
329  HBASendRNIDFunc SendRNIDHandler;
330  HBASendScsiInquiryFunc ScsiInquiryHandler;
331  HBASendReportLUNsFunc ReportLUNsHandler;
332  HBASendReadCapacityFunc ReadCapacityHandler;
333  HBAOpenAdapterByWWNFunc OpenAdapterByWWNHandler;
334  HBAGetFcpTargetMappingV2Func GetFcpTargetMappingV2Handler;
335  HBASendCTPassThruV2Func SendCTPassThruV2Handler;
336  HBARefreshAdapterConfigurationFunc RefreshAdapterConfigurationHandler;
337  HBAGetBindingCapabilityFunc GetBindingCapabilityHandler;
338  HBAGetBindingSupportFunc GetBindingSupportHandler;
339  HBASetBindingSupportFunc SetBindingSupportHandler;
340  HBASetPersistentBindingV2Func SetPersistentBindingV2Handler;
341  HBAGetPersistentBindingV2Func GetPersistentBindingV2Handler;
342  HBARemovePersistentBindingFunc RemovePersistentBindingHandler;
343  HBARemoveAllPersistentBindingsFunc
344  RemoveAllPersistentBindingsHandler;
345  HBASendRNIDV2Func SendRNIDV2Handler;
346  HBAScsiInquiryV2Func ScsiInquiryV2Handler;
347  HBAScsiReportLUNsV2Func ScsiReportLUNsV2Handler;
348  HBAScsiReadCapacityV2Func ScsiReadCapacityV2Handler;
349  HBAGetVendorLibraryAttributesFunc
350  GetVendorLibraryAttributesHandler;
351  HBARemoveCallbackFunc RemoveCallbackHandler;
352  HBARegisterForAdapterAddEventsFunc
353  RegisterForAdapterAddEventsHandler;
354  HBARegisterForAdapterEventsFunc RegisterForAdapterEventsHandler;
355  HBARegisterForAdapterPortEventsFunc
356  RegisterForAdapterPortEventsHandler;
357  HBARegisterForAdapterPortStatEventsFunc
358  RegisterForAdapterPortStatEventsHandler;
359  HBARegisterForTargetEventsFunc RegisterForTargetEventsHandler;
360  HBARegisterForLinkEventsFunc RegisterForLinkEventsHandler;
361  HBASendRPLFunc SendRPLHandler;
362  HBASendRPSFunc SendRPSHandler;
363  HBASendSRLFunc SendSRLHandler;
364  HBASendLIRRFunc SendLIRRHandler;
365  HBAGetFC4StatisticsFunc GetFC4StatisticsHandler;
366  HBAGetFCPStatisticsFunc GetFCPStatisticsHandler;
367  HBASendRLSFunc SendRLSHandler;
368 } HBA_ENTRYPOINTSV2;
369 
370 HBA_STATUS HBA_RegisterLibraryV2(HBA_ENTRYPOINTSV2 *);
371 
372 #endif /* HBAAPI_VENDOR_LIB */
373 
375 #define HBAAPI_LIBRARY_VERSION 2
376 
379 #define HBAAPI_LIBRARY_FINAL 0
380 
382 #define HBAAPI_LIBRARY_REVISION VERSION
383 
385 #define VLIB_ENV_LOG_LEVEL "LIB_ZFCP_HBAAPI_LOG_LEVEL"
386 
388 #define VLIB_ENV_LOG_FILE "LIB_ZFCP_HBAAPI_LOG_FILE"
389 
391 #define VLIB_ADAPTERNAME_PREFIX "com.ibm-FICON-FCP-"
392 
394 #define VLIB_ADAPTERNAME_LEN 256
395 
397 #define VLIB_INVALID_HANDLE 0
398 
400 #define REPORTLUNS_WLUN 0xc101000000000000
401 #define REPORTLUNS_WLUN_DEC 49409
402 
403 typedef uint64_t devid_t;
404 typedef uint64_t wwn_t;
405 typedef uint32_t fc_id_t;
406 typedef uint64_t fcp_lun_t;
407 
409 struct vlib_event {
410  HBA_EVENTINFO hbaapi_event;
411  struct vlib_event *next;
412 };
413 
416  unsigned int slots_used;
417  struct vlib_event *first;
418  struct vlib_event *last;
419 };
420 
422 struct block {
423  void *data;
424  size_t used;
425  size_t allocated;
426 };
427 
429 struct vlib_unit {
430  unsigned int isInvalid:1;
431  unsigned int host;
432  unsigned int channel;
433  unsigned int target;
434  unsigned int lun;
435  uint64_t fcLun;
436  char sg_dev[16];
437 };
438 
440 struct vlib_port {
441  unsigned int isInvalid:1;
442  wwn_t wwpn;
443  wwn_t wwnn;
444  fc_id_t did;
445  struct block units;
446  char name[32];
448  unsigned int host;
449  unsigned int channel;
450  unsigned int target;
451 };
452 
455  devid_t devid;
456  wwn_t wwnn;
457  wwn_t wwpn;
458  unsigned short host;
459  fc_id_t did;
460  char bus_dev_name[9];
463  char class_dev_name[9];
466  char sysfsPath[PATH_MAX];
468 };
469 
471 struct vlib_adapter {
472  unsigned int isInvalid:1;
473  struct vlib_adapter_ident ident;
474  HBA_HANDLE handle;
475  struct block ports;
478 };
479 
481 struct vlib_data {
482  unsigned int isLoaded:1;
483  unsigned int unloading:1;
484  unsigned int isValid:1;
487  int loglevel;
489  FILE *errfp;
491  struct block adapters;
494  pthread_t id;
496  pthread_mutex_t mutex;
497 };
498 
508 extern struct vlib_data vlib_data;
509 
511 static inline void vlib_print_error(int errnum, const char *function,
512  const char *file, int line,
513  char *fmt, ...)
514 {
515  char buffer[256];
516  va_list ap;
517 
518  if (0 == vlib_data.loglevel)
519  return;
520 
521  fprintf(vlib_data.errfp, "(%s:%d)%s: ", file, line, function);
522 
523  va_start(ap, fmt);
524  vfprintf(vlib_data.errfp, fmt, ap);
525  va_end(ap);
526 
527  if (errnum != 0) {
528  fprintf(vlib_data.errfp, ": %s\n",
529  strerror_r(errnum, buffer, 256));
530  }
531 }
532 
535 #define VLIB_PERROR(errnum, fmt, args...) \
536 vlib_print_error(errnum, __func__, __FILE__, __LINE__, fmt, ##args)
537 
539 #define VLIB_LOG(fmt, args...) \
540 vlib_print_error(0, __func__, __FILE__, __LINE__, fmt, ##args)
541 
547 #ifdef HBAAPI_BACKTRACE
548 #define BT_SIZE 50
549 static inline void vlib_bt(void)
550 {
551  int num;
552  void *array[BT_SIZE] = { 0 };
553 
554  num = backtrace(array, BT_SIZE);
555  backtrace_symbols_fd(array, num, fileno(stderr));
556 }
557 #else
558 #define vlib_bt()
559 #endif
560 
568 #define VLIB_MUTEX_LOCK(mutex) \
569 do { \
570  int __ret; \
571  __ret = pthread_mutex_lock(mutex); \
572  if (__ret == EDEADLK) { \
573  VLIB_LOG("BUG: VLIB_MUTEX_LOCK: deadlock detected!\n"); \
574  vlib_bt(); \
575  exit(1); \
576  } else if (__ret == EINVAL) { \
577  VLIB_LOG("BUG: VLIB_MUTEX_LOCK: mutex not properly " \
578  "initialized\n"); \
579  vlib_bt(); \
580  exit(1); \
581  } \
582 } while (0)
583 
591 #define VLIB_MUTEX_UNLOCK(mutex) \
592 do { \
593  int __ret; \
594  __ret = pthread_mutex_unlock(mutex); \
595  if (__ret == EPERM) { \
596  VLIB_LOG("BUG: VLIB_MUTEX_UNLOCK: thread does not own " \
597  "mutex!\n"); \
598  vlib_bt(); \
599  exit(1); \
600  } else if (__ret == EINVAL) { \
601  VLIB_LOG("BUG: VLIB_MUTEX_UNLOCK: " \
602  "mutex not properly initialized\n"); \
603  vlib_bt(); \
604  exit(1); \
605  } \
606 } while (0)
607 
608 /* Include auxiliary stuff, like inline and helper functions etc. */
609 #include "vlib_aux.h"
610 #include "vlib_sysfs.h"
611 #include "vlib_sg.h"
612 #include "vlib_sg_io.h"
613 #include "vlib_events.h"
614 #include "vlib_sfhelper.h"
615 
616 #endif /* _VLIB_H_ */
Configuration header file after configure script was run.
C header file descriping the HBA API.
Block structure used to hold all needed data for growable arrays.
Definition: vlib.h:422
size_t allocated
total number of elements in the array
Definition: vlib.h:425
void * data
pointer to an array
Definition: vlib.h:423
size_t used
number of used elements in the array
Definition: vlib.h:424
Identification of an adapter in the library.
Definition: vlib.h:454
fc_id_t did
FC did of the port.
Definition: vlib.h:459
devid_t devid
Unique id for adapter device.
Definition: vlib.h:455
wwn_t wwnn
WWN of adapter node.
Definition: vlib.h:456
char class_dev_name[9]
name of device as in /sys/class/fc_host in the form "hostxxxx"
Definition: vlib.h:463
wwn_t wwpn
WWN of adapter port.
Definition: vlib.h:457
char bus_dev_name[9]
name of device as in /sys/bus/ccw/drivers/zfcp in the form "x.x.xxxx"
Definition: vlib.h:460
unsigned short host
SCSI host id of this adapter.
Definition: vlib.h:458
char sysfsPath[PATH_MAX]
path of adapter in sysfs in the form /sys/devices/css0/0.0.0010/0.0.5923
Definition: vlib.h:466
Represenation of an adapter in the library.
Definition: vlib.h:471
struct vlib_event_queue event_queue
Event queue.
Definition: vlib.h:476
struct vlib_event_queue free_event_list
Free slots.
Definition: vlib.h:477
HBA_HANDLE handle
Handle for this adapter.
Definition: vlib.h:474
struct vlib_adapter_ident ident
Adapter identification.
Definition: vlib.h:473
unsigned int isInvalid
Adapter invalid or not.
Definition: vlib.h:472
struct block ports
List of ports.
Definition: vlib.h:475
Primary data structure used in the library.
Definition: vlib.h:481
pthread_mutex_t mutex
Protects this structure.
Definition: vlib.h:496
pthread_t id
Pthread ID of event handling thread.
Definition: vlib.h:494
unsigned int unloading
Library unloaded.
Definition: vlib.h:483
unsigned int isValid
Repositoy valid or not This flag is set for instance if a loss of events is detected.
Definition: vlib.h:484
struct block adapters
List of adapters In fact this is the anchor of the library's repository.
Definition: vlib.h:491
int loglevel
loglevel for library Default is 0 – no logging.
Definition: vlib.h:487
FILE * errfp
file used for logging Default is stderr.
Definition: vlib.h:489
unsigned int isLoaded
Library loaded or not.
Definition: vlib.h:482
Event queue data structure used in the library.
Definition: vlib.h:415
Event data structure used in the library.
Definition: vlib.h:409
Representation of a FC port in the library.
Definition: vlib.h:440
wwn_t wwnn
WWNN of the port.
Definition: vlib.h:443
wwn_t wwpn
WWPN of the port.
Definition: vlib.h:442
unsigned int target
SCSI id.
Definition: vlib.h:450
unsigned int isInvalid
Port invalid or not.
Definition: vlib.h:441
struct block units
List of units.
Definition: vlib.h:445
unsigned int host
SCSI host.
Definition: vlib.h:448
unsigned int channel
SCSI channel.
Definition: vlib.h:449
fc_id_t did
FC did of the port.
Definition: vlib.h:444
char name[32]
name as in sysfs under fc_remote_ports
Definition: vlib.h:446
Represenation of an FCP unit in the library.
Definition: vlib.h:429
unsigned int host
SCSI host.
Definition: vlib.h:431
unsigned int isInvalid
Unit invalid or not.
Definition: vlib.h:430
unsigned int target
SCSI id.
Definition: vlib.h:433
unsigned int channel
SCSI channel.
Definition: vlib.h:432
unsigned int lun
SCSI LUN.
Definition: vlib.h:434
char sg_dev[16]
name of sg device
Definition: vlib.h:436
uint64_t fcLun
FCP LUN.
Definition: vlib.h:435
static void vlib_print_error(int errnum, const char *function, const char *file, int line, char *fmt,...)
This is a wrapper for the usage of strerror_r().
Definition: vlib.h:511
#define vlib_bt()
Print a stack backtrace.
Definition: vlib.h:558
Auxiliary functions used in the library.
All calls that need the sysfs.