From ec46d6fa43e33d3cc943fc28d09045a006eb4bac Mon Sep 17 00:00:00 2001 From: Peter Lieven Date: Tue, 6 Nov 2012 16:07:43 +0100 Subject: [PATCH] DEBUG add function to set debug fd DPRINTF was blindly sending all debug output to fd 2 (stderr). The new function iscsi_set_debug_fd() will set the debug fd. In general debugging is completely disabled by default. --- include/iscsi-private.h | 3 ++- include/iscsi.h | 14 ++++++++++---- lib/init.c | 12 ++++++++++++ lib/libiscsi.def | 1 + lib/libiscsi.syms | 1 + 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/include/iscsi-private.h b/include/iscsi-private.h index 5655d9e..1250dec 100644 --- a/include/iscsi-private.h +++ b/include/iscsi-private.h @@ -130,6 +130,7 @@ struct iscsi_context { int no_auto_reconnect; int reconnect_deferred; int debug; + int debug_fd; int mallocs; int reallocs; int frees; @@ -304,7 +305,7 @@ struct scsi_task *iscsi_scsi_get_task_from_pdu(struct iscsi_pdu *pdu); void iscsi_set_noautoreconnect(struct iscsi_context *iscsi, int state); -void iscsi_decrement_iface_rr(); +void iscsi_decrement_iface_rr(void); #ifdef __cplusplus } diff --git a/include/iscsi.h b/include/iscsi.h index fde65c8..d8c67f2 100644 --- a/include/iscsi.h +++ b/include/iscsi.h @@ -971,12 +971,12 @@ iscsi_scsi_cancel_all_tasks(struct iscsi_context *iscsi); #define DPRINTF(iscsi,level,fmt,args...) \ do { \ if ((iscsi)->debug >= level) { \ - fprintf(stderr,"libiscsi: "); \ - fprintf(stderr, (fmt), ##args); \ + dprintf((iscsi)->debug_fd,"libiscsi: "); \ + dprintf((iscsi)->debug_fd, (fmt), ##args); \ if (iscsi->target_name[0]) { \ - fprintf(stderr," [%s]",iscsi->target_name); \ + dprintf((iscsi)->debug_fd," [%s]",iscsi->target_name); \ } \ - fprintf(stderr,"\n"); \ + dprintf((iscsi)->debug_fd,"\n"); \ } \ } while (0); @@ -993,6 +993,12 @@ iscsi_scsi_cancel_all_tasks(struct iscsi_context *iscsi); EXTERN void iscsi_set_debug(struct iscsi_context *iscsi, int level); +/* + * This function is to set fd where debugging info is sent to. default is stderr (2) + */ +EXTERN void +iscsi_set_debug_fd(struct iscsi_context *iscsi, int fd); + /* * This function is to set the TCP_USER_TIMEOUT option. It has to be called after iscsi * context creation. The value given in ms is then applied each time a new socket is created. diff --git a/lib/init.c b/lib/init.c index 143cf9b..1464916 100644 --- a/lib/init.c +++ b/lib/init.c @@ -87,6 +87,7 @@ iscsi_create_context(const char *initiator_name) strncpy(iscsi->initiator_name,initiator_name,MAX_STRING_SIZE); iscsi->fd = -1; + iscsi->debug_fd = 2; srand(time(NULL) ^ getpid() ^ (u_int32_t) iscsi); @@ -112,6 +113,10 @@ iscsi_create_context(const char *initiator_name) iscsi->tcp_keepintvl=30; iscsi->tcp_keepidle=30; + if (getenv("LIBISCSI_DEBUG_FD") != NULL) { + iscsi_set_debug_fd(iscsi,atoi(getenv("LIBISCSI_DEBUG_FD"))); + } + if (getenv("LIBISCSI_DEBUG") != NULL) { iscsi_set_debug(iscsi,atoi(getenv("LIBISCSI_DEBUG"))); } @@ -315,6 +320,13 @@ iscsi_set_debug(struct iscsi_context *iscsi, int level) DPRINTF(iscsi,2,"set debug level to %d",level); } +void +iscsi_set_debug_fd(struct iscsi_context *iscsi, int fd) +{ + iscsi->debug_fd = fd; + DPRINTF(iscsi,2,"set debug fd to %d",fd); +} + const char * iscsi_get_error(struct iscsi_context *iscsi) { diff --git a/lib/libiscsi.def b/lib/libiscsi.def index 95f4552..3f38d87 100644 --- a/lib/libiscsi.def +++ b/lib/libiscsi.def @@ -65,6 +65,7 @@ iscsi_scsi_task_cancel iscsi_service iscsi_set_alias iscsi_set_debug +iscsi_set_debug_fd iscsi_set_header_digest iscsi_set_initiator_username_pwd iscsi_set_isid_en diff --git a/lib/libiscsi.syms b/lib/libiscsi.syms index 4eaeb67..5129d9c 100644 --- a/lib/libiscsi.syms +++ b/lib/libiscsi.syms @@ -63,6 +63,7 @@ iscsi_scsi_task_cancel iscsi_service iscsi_set_alias iscsi_set_debug +iscsi_set_debug_fd iscsi_set_header_digest iscsi_set_initiator_username_pwd iscsi_set_isid_en