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
27
40
47
117
122
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 */
160typedef HBA_UINT32(*HBAGetVersionFunc)(void);
161typedef HBA_STATUS(*HBALoadLibraryFunc)(void);
162typedef HBA_STATUS(*HBAFreeLibraryFunc)(void);
163typedef HBA_UINT32(*HBAGetVendorLibraryAttributesFunc)(HBA_LIBRARYATTRIBUTES *);
164typedef HBA_UINT32(*HBAGetNumberOfAdaptersFunc)(void);
165typedef void(*HBARefreshInformationFunc)(HBA_HANDLE);
166typedef void(*HBARefreshAdapterConfigurationFunc)(void);
167typedef void(*HBAResetStatisticsFunc)(HBA_HANDLE, HBA_UINT32);
168
169/* adapter and port information */
170typedef HBA_STATUS(*HBAGetAdapterNameFunc)(HBA_UINT32, char *);
171typedef HBA_HANDLE(*HBAOpenAdapterFunc)(char *);
172typedef HBA_STATUS(*HBAOpenAdapterByWWNFunc)(HBA_HANDLE *, HBA_WWN);
173typedef void(*HBACloseAdapterFunc)(HBA_HANDLE);
174typedef HBA_STATUS(*HBAGetAdapterAttributesFunc)
175 (HBA_HANDLE, HBA_ADAPTERATTRIBUTES *);
176typedef HBA_STATUS(*HBAGetAdapterPortAttributesFunc)
177 (HBA_HANDLE, HBA_UINT32, HBA_PORTATTRIBUTES *);
178typedef HBA_STATUS(*HBAGetDiscoveredPortAttributesFunc)
179 (HBA_HANDLE, HBA_UINT32, HBA_UINT32, HBA_PORTATTRIBUTES *);
180typedef HBA_STATUS(*HBAGetPortAttributesByWWNFunc)
181 (HBA_HANDLE, HBA_WWN, HBA_PORTATTRIBUTES *);
182typedef HBA_STATUS(*HBAGetPortStatisticsFunc)
183 (HBA_HANDLE, HBA_UINT32, HBA_PORTSTATISTICS *);
184typedef HBA_STATUS(*HBAGetFC4StatisticsFunc)
185 (HBA_HANDLE, HBA_WWN, HBA_UINT8, HBA_FC4STATISTICS *);
186
187/* FCP information */
188typedef HBA_STATUS(*HBAGetBindingCapabilityFunc)
189 (HBA_HANDLE, HBA_WWN, HBA_BIND_CAPABILITY *);
190typedef HBA_STATUS(*HBAGetBindingSupportFunc)
191 (HBA_HANDLE, HBA_WWN, HBA_BIND_CAPABILITY *);
192typedef HBA_STATUS(*HBASetBindingSupportFunc)
193 (HBA_HANDLE, HBA_WWN, HBA_BIND_CAPABILITY);
194typedef HBA_STATUS(*HBAGetFcpTargetMappingFunc)
195 (HBA_HANDLE, HBA_FCPTARGETMAPPING *);
196typedef HBA_STATUS(*HBAGetFcpTargetMappingV2Func)
197 (HBA_HANDLE, HBA_WWN, HBA_FCPTARGETMAPPINGV2 *);
198typedef HBA_STATUS(*HBAGetFcpPersistentBindingFunc)
199 (HBA_HANDLE, HBA_FCPBINDING *);
200typedef HBA_STATUS(*HBAGetPersistentBindingV2Func)
201 (HBA_HANDLE, HBA_WWN, HBA_FCPBINDING2 *);
202typedef HBA_STATUS(*HBASetPersistentBindingV2Func)
203 (HBA_HANDLE, HBA_WWN, HBA_FCPBINDING2 *);
204typedef HBA_STATUS(*HBARemovePersistentBindingFunc)
205 (HBA_HANDLE, HBA_WWN, HBA_FCPBINDING2 *);
206typedef HBA_STATUS(*HBARemoveAllPersistentBindingsFunc)(HBA_HANDLE, HBA_WWN);
207typedef HBA_STATUS(*HBAGetFCPStatisticsFunc)
208 (HBA_HANDLE, const HBA_SCSIID *, HBA_FC4STATISTICS *);
209
210/* SCSI information */
211typedef HBA_STATUS(*HBASendScsiInquiryFunc)
212 (HBA_HANDLE, HBA_WWN, HBA_UINT64, HBA_UINT8, HBA_UINT32, void *,
213 HBA_UINT32, void *, HBA_UINT32);
214typedef 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 *);
217typedef HBA_STATUS(*HBASendReportLUNsFunc)
218 (HBA_HANDLE, HBA_WWN, void *, HBA_UINT32, void *, HBA_UINT32);
219typedef HBA_STATUS(*HBAScsiReportLUNsV2Func)
220 (HBA_HANDLE, HBA_WWN, HBA_WWN, void *, HBA_UINT32 *, HBA_UINT8 *, void *,
221 HBA_UINT32 *);
222typedef HBA_STATUS(*HBASendReadCapacityFunc)
223 (HBA_HANDLE, HBA_WWN, HBA_UINT64, void *, HBA_UINT32, void *, HBA_UINT32);
224typedef 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 */
229typedef HBA_STATUS(*HBASendCTPassThruFunc)
230 (HBA_HANDLE, void *, HBA_UINT32, void *, HBA_UINT32);
231typedef HBA_STATUS(*HBASendCTPassThruV2Func)
232 (HBA_HANDLE, HBA_WWN, void *, HBA_UINT32, void *, HBA_UINT32 *);
233typedef HBA_STATUS(*HBASetRNIDMgmtInfoFunc)(HBA_HANDLE, HBA_MGMTINFO *);
234typedef HBA_STATUS(*HBAGetRNIDMgmtInfoFunc)(HBA_HANDLE, HBA_MGMTINFO *);
235typedef HBA_STATUS(*HBASendRNIDFunc)
236 (HBA_HANDLE, HBA_WWN, HBA_WWNTYPE, void *, HBA_UINT32 *);
237typedef HBA_STATUS(*HBASendRNIDV2Func)
238 (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, HBA_UINT32, void *,
239 HBA_UINT32 *);
240typedef HBA_STATUS(*HBASendRPLFunc)
241 (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, HBA_UINT32, void *,
242 HBA_UINT32 *);
243typedef HBA_STATUS(*HBASendRPSFunc)
244 (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, HBA_WWN, HBA_UINT32, void *,
245 HBA_UINT32 *);
246typedef HBA_STATUS(*HBASendSRLFunc)
247 (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, void *, HBA_UINT32 *);
248typedef HBA_STATUS(*HBASendLIRRFunc)
249 (HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT8, HBA_UINT8, void *, HBA_UINT32 *);
250typedef HBA_STATUS(*HBASendRLSFunc)
251 (HBA_HANDLE, HBA_WWN, HBA_WWN, void *, HBA_UINT32 *);
252
253/* event handling */
254typedef HBA_STATUS(*HBAGetEventBufferFunc)
255 (HBA_HANDLE, HBA_EVENTINFO *, HBA_UINT32 *);
256typedef HBA_STATUS(*HBARegisterForAdapterAddEventsFunc)
257 (void (*)(void *, HBA_WWN, HBA_UINT32), void *, HBA_CALLBACKHANDLE *);
258typedef HBA_STATUS(*HBARegisterForAdapterEventsFunc)
259 (void (*)(void *, HBA_WWN, HBA_UINT32), void *, HBA_HANDLE,
260 HBA_CALLBACKHANDLE *);
261typedef HBA_STATUS(*HBARegisterForAdapterPortEventsFunc)
262 (void (*)(void *, HBA_WWN, HBA_UINT32, HBA_UINT32), void *, HBA_HANDLE,
263 HBA_WWN, HBA_CALLBACKHANDLE *);
264typedef HBA_STATUS(*HBARegisterForAdapterPortStatEventsFunc)
265 (void (*)(void *, HBA_WWN, HBA_UINT32), void *, HBA_HANDLE, HBA_WWN,
266 HBA_PORTSTATISTICS, HBA_UINT32, HBA_CALLBACKHANDLE *);
267typedef HBA_STATUS(*HBARegisterForTargetEventsFunc)
268 (void (*)(void *, HBA_WWN, HBA_WWN, HBA_UINT32), void *, HBA_HANDLE,
269 HBA_WWN, HBA_WWN, HBA_CALLBACKHANDLE *, HBA_UINT32);
270typedef HBA_STATUS(*HBARegisterForLinkEventsFunc)
271 (void (*)(void *, HBA_WWN, HBA_UINT32, void *, HBA_UINT32), void *,
272 void *, HBA_UINT32, HBA_HANDLE, HBA_CALLBACKHANDLE *);
273typedef 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 */
277typedef 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
305HBA_STATUS HBA_RegisterLibrary(HBA_ENTRYPOINTS *);
306
307typedef 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
370HBA_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
403typedef uint64_t devid_t;
404typedef uint64_t wwn_t;
405typedef uint32_t fc_id_t;
406typedef uint64_t fcp_lun_t;
407
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
422struct block {
423 void *data;
424 size_t used;
425 size_t allocated;
426};
427
429struct 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
440struct 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];
466 char sysfsPath[PATH_MAX];
468};
469
479
481struct vlib_data {
482 unsigned int isLoaded:1;
483 unsigned int unloading:1;
484 unsigned int isValid:1;
489 FILE *errfp;
494 pthread_t id;
496 pthread_mutex_t mutex;
497};
498
508extern struct vlib_data vlib_data;
509
511static 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...) \
536vlib_print_error(errnum, __func__, __FILE__, __LINE__, fmt, ##args)
537
539#define VLIB_LOG(fmt, args...) \
540vlib_print_error(0, __func__, __FILE__, __LINE__, fmt, ##args)
541
547#ifdef HBAAPI_BACKTRACE
548#define BT_SIZE 50
549static 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) \
569do { \
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) \
592do { \
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.