The print_errors() routine (for print dcbd operational state errors)
was not working correctly.  This patch fixes it.

Signed-off-by:  Eric Multanen <[email protected]>
---

 fcoemon.c |   85 +++++++++++++++++++++++++++----------------------------------
 1 files changed, 37 insertions(+), 48 deletions(-)

diff --git a/fcoemon.c b/fcoemon.c
index 000e7a6..e239ef4 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -135,7 +135,7 @@ static struct sa_timer fcm_dcbd_timer;
 char *fcm_dcbd_cmd = CONFIG_DIR "/scripts/fcoeplumb";
 
 /* Debugging routine */
-static void print_errors(char *buf, int errors);
+static void print_errors(int errors);
 
 struct fcm_fcoe_head fcm_fcoe_head = TAILQ_HEAD_INITIALIZER(fcm_fcoe_head);
 
@@ -1240,10 +1240,12 @@ static int validating_dcb_app_pfc(struct fcm_fcoe *ff)
        }
        if (!ff->ff_app_info.op_mode) {
                FCM_LOG_DEV(ff, "WARNING: APP:0 operational mode is false\n");
+               print_errors(ff->ff_app_info.op_error);
                error++;
        }
        if (!ff->ff_pfc_info.op_mode) {
                FCM_LOG_DEV(ff, "WARNING: PFC operational mode is false\n");
+               print_errors(ff->ff_pfc_info.op_error);
                error++;
        }
        if ((ff->ff_pfc_info.u.pfcup & ff->ff_app_info.u.appcfg) \
@@ -1422,7 +1424,7 @@ static void fcm_dcbd_get_oper(struct fcm_fcoe *ff, char 
*resp,
                        FCM_LOG_DEV_DBG(ff, "val=0x%x resp:%s\n", val,
                                        resp);
                        if (fcoe_config.debug)
-                               print_errors("", val);
+                               print_errors(val);
 
                        fcm_dcbd_setup(ff, ADM_DESTROY);
                        fcm_dcbd_state_set(ff, FCD_DONE);
@@ -1552,7 +1554,7 @@ static void fcm_dcbd_get_peer(struct fcm_fcoe *ff, char 
*resp,
        if (val != 0) {
                FCM_LOG_DEV_DBG(ff, "val=0x%x resp:%s\n", val, resp);
                if (fcoe_config.debug)
-                       print_errors("", val);
+                       print_errors(val);
                fcm_dcbd_setup(ff, ADM_DESTROY);
                fcm_dcbd_state_set(ff, FCD_DONE);
                return;
@@ -2105,61 +2107,48 @@ int main(int argc, char **argv)
 /*******************************************************
  *         The following are debug routines            *
  *******************************************************/
+static void add_msg_to_buf(char *buf, int maxlen, char *msg, char *prefix)
+{
+       int len = strlen(buf);
+
+       if (len + strlen(msg) + strlen(prefix) < maxlen)
+               sprintf(buf+len, "%s%s", prefix, msg);
+}
 
-static void print_errors(char *buf, int errors)
+static void print_errors(int errors)
 {
-       char msg[80];
-       int len, j;
-       int flag = 0;
+       char msg[256];
+       int cnt = 0;
 
        memset(msg, 0, sizeof(msg));
-       len = sprintf(msg, "0x%02x - ", errors);
+       sprintf(msg, "0x%02x - ", errors);
 
-       if (!errors) {
-               j = sprintf(msg + len, "none\n");
-               FCM_LOG("%s %s", buf, msg);
-               return;
-       }
+       if (errors & 0x01)
+               add_msg_to_buf(msg, sizeof(msg), "mismatch with peer",
+                             (cnt++) ? ", " : "");
 
-       if (errors & 0x01) {
-               flag++;
-               j = sprintf(msg + len, "mismatch with peer");
-       }
+       if (errors & 0x02)
+               add_msg_to_buf(msg, sizeof(msg), "local configuration error",
+                             (cnt++) ? ", " : "");
 
-       if (errors & 0x02) {
-               j = len;
-               if (flag++)
-                       j = sprintf(msg + len, ", ");
-               sprintf(msg + j, "local configuration error");
-       }
+       if (errors & 0x04)
+               add_msg_to_buf(msg, sizeof(msg), "multiple TLV's received",
+                             (cnt++) ? ", " : "");
 
-       if (errors & 0x04) {
-               j = len;
-               if (flag++)
-                       j = sprintf(msg + len, ", ");
-               sprintf(msg + j, "multiple TLV's received");
-       }
+       if (errors & 0x08)
+               add_msg_to_buf(msg, sizeof(msg), "peer error",
+                             (cnt++) ? ", " : "");
 
-       if (errors & 0x08) {
-               j = len;
-               if (flag++)
-                       j = sprintf(msg + len, ", ");
-               sprintf(msg + j, "peer error");
-       }
+       if (errors & 0x10)
+               add_msg_to_buf(msg, sizeof(msg), "multiple LLDP neighbors",
+                             (cnt++) ? ", " : "");
 
-       if (errors & 0x10) {
-               j = len;
-               if (flag++)
-                       j = sprintf(msg + len, ", ");
-               sprintf(msg + j, "multiple LLDP neighbors");
-       }
+       if (errors & 0x20)
+               add_msg_to_buf(msg, sizeof(msg), "peer feature not present",
+                             (cnt++) ? ", " : "");
 
-       if (errors & 0x20) {
-               j = len;
-               if (flag++)
-                       j = sprintf(msg + len, ", ");
-               sprintf(msg + j, "peer feature not present");
-       }
+       if (!errors)
+               add_msg_to_buf(msg, sizeof(msg), "none", "");
 
-       FCM_LOG("%s %s\n", buf, msg);
+       FCM_LOG("%s\n", msg);
 }

_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel

Reply via email to