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