There are misc small fixes for lft dump parser:
- merge ERROR and SYS logging in single osm_log() call
- more strict strtoul() results checking
- fix potential bugs with invalid dump files
- break too long lines

Signed-off-by: Sasha Khapyorsky <[EMAIL PROTECTED]>
---
 osm/opensm/osm_ucast_file.c |   69 +++++++++++++++++++++++--------------------
 1 files changed, 37 insertions(+), 32 deletions(-)

diff --git a/osm/opensm/osm_ucast_file.c b/osm/opensm/osm_ucast_file.c
index da39d1a..446c243 100644
--- a/osm/opensm/osm_ucast_file.c
+++ b/osm/opensm/osm_ucast_file.c
@@ -132,21 +132,19 @@ static int do_ucast_file_load(void *cont
 
        file_name = p_osm->subn.opt.ucast_dump_file;
        if (!file_name) {
-               osm_log(&p_osm->log, OSM_LOG_SYS,
-                       "ucast dump file name is not defined; using default 
routing algorithm\n");
-               osm_log(&p_osm->log, OSM_LOG_ERROR,
+               osm_log(&p_osm->log, OSM_LOG_ERROR|OSM_LOG_SYS,
                        "do_ucast_file_load: ERR 6301: "
-                       "ucast dump file name is not defined; using default 
routing algorithm\n");
+                       "ucast dump file name is not defined; "
+                       "using default routing algorithm\n");
                return -1;
        }
 
        file = fopen(file_name, "r");
        if (!file) {
-               osm_log(&p_osm->log, OSM_LOG_SYS,
-                       "Cannot open ucast dump file \'%s\'; using default 
routing algorithm\n", file_name);
-               osm_log(&p_osm->log, OSM_LOG_ERROR,
+               osm_log(&p_osm->log, OSM_LOG_ERROR|OSM_LOG_SYS,
                        "do_ucast_file_load: ERR 6302: "
-                       "cannot open ucast dump file \'%s\'; using default 
routing algorithm\n", file_name);
+                       "cannot open ucast dump file \'%s\'; "
+                       "using default routing algorithm\n", file_name);
                return -1;
        }
 
@@ -167,25 +165,25 @@ static int do_ucast_file_load(void *cont
                        continue;
 
                if (!strncmp(p, "Multicast mlids", 15)) {
-                       osm_log(&p_osm->log, OSM_LOG_SYS,
-                               "Multicast dump file detected; "
-                               "skipping parsing. Using default routing 
algorithm\n");
-                       osm_log(&p_osm->log, OSM_LOG_ERROR,
+                       osm_log(&p_osm->log, OSM_LOG_ERROR|OSM_LOG_SYS,
                                "do_ucast_file_load: ERR 6303: "
                                "Multicast dump file detected; "
-                               "skipping parsing. Using default routing 
algorithm\n");
+                               "skipping parsing. Using default "
+                               "routing algorithm\n");
                } else if (!strncmp(p, "Unicast lids", 12)) {
                        q = strstr(p, " guid 0x");
                        if (!q) {
-                               osm_log(&p_osm->log, OSM_LOG_ERROR, "PARSE 
ERROR: %s:%u: "
+                               osm_log(&p_osm->log, OSM_LOG_ERROR,
+                                       "PARSE ERROR: %s:%u: "
                                        "cannot parse switch definition\n",
                                        file_name, lineno);
                                return -1;
                        }
-                       p = q + 6;
+                       p = q + 8;
                        sw_guid = strtoull(p, &q, 16);
-                       if (q && !isspace(*q)) {
-                               osm_log(&p_osm->log, OSM_LOG_ERROR, "PARSE 
ERROR: %s:%u: "
+                       if (q == p || !isspace(*q)) {
+                               osm_log(&p_osm->log, OSM_LOG_ERROR,
+                                       "PARSE ERROR: %s:%u: "
                                        "cannot parse switch guid: \'%s\'\n",
                                        file_name, lineno, p);
                                return -1;
@@ -204,39 +202,46 @@ static int do_ucast_file_load(void *cont
                                continue;
                        }
                } else if (p_sw && !strncmp(p, "0x", 2)) {
+                       p += 2;
                        lid = (uint16_t)strtoul(p, &q, 16);
-                       if (q && !isspace(*q)) {
-                               osm_log(&p_osm->log, OSM_LOG_ERROR, "PARSE 
ERROR: %s:%u: "
-                                       "cannot parse lid: \'%s\'\n", 
file_name, lineno, p);
+                       if (q == p || !isspace(*q)) {
+                               osm_log(&p_osm->log, OSM_LOG_ERROR,
+                                       "PARSE ERROR: %s:%u: "
+                                       "cannot parse lid: \'%s\'\n",
+                                       file_name, lineno, p);
                                return -1;
                        }
                        p = q;
                        while (isspace(*p))
                                p++;
                        port_num = (uint8_t)strtoul(p, &q, 10);
-                       if (q && !isspace(*q)) {
-                               osm_log(&p_osm->log, OSM_LOG_ERROR, "PARSE 
ERROR: %s:%u: "
-                                       "cannot parse port: \'%s\'\n", 
file_name, lineno, p);
+                       if (q == p || !isspace(*q)) {
+                               osm_log(&p_osm->log, OSM_LOG_ERROR,
+                                       "PARSE ERROR: %s:%u: "
+                                       "cannot parse port: \'%s\'\n",
+                                       file_name, lineno, p);
                                return -1;
                        }
                        p = q;
                        /* additionally try to exract guid */
                        q = strstr(p, " portguid 0x");
                        if (!q) {
-                               osm_log(&p_osm->log, OSM_LOG_VERBOSE, "PARSE 
WARNING: %s:%u: "
+                               osm_log(&p_osm->log, OSM_LOG_VERBOSE,
+                                       "PARSE WARNING: %s:%u: "
                                        "cannot find port guid "
-                                       "(maybe broken dump): \'%s\'\n", 
file_name, lineno, p);
+                                       "(maybe broken dump): \'%s\'\n",
+                                       file_name, lineno, p);
                                port_guid = 0;
                        }
-                       else
-                       {
-                               p = q + 10;
+                       else {
+                               p = q + 12;
                                port_guid = strtoull(p, &q, 16);
-                               if (!q && !isspace(*q) && *q != ':') {
-                                       osm_log(&p_osm->log, OSM_LOG_VERBOSE, 
"PARSE WARNING: %s:%u: "
+                               if (q == p || (!isspace(*q) && *q != ':')) {
+                                       osm_log(&p_osm->log, OSM_LOG_VERBOSE,
+                                               "PARSE WARNING: %s:%u: "
                                                "cannot parse port guid "
-                                               "(maybe broken dump): "
-                                               "\'%s\'\n", file_name, lineno, 
p);
+                                               "(maybe broken dump): \'%s\'\n",
+                                               file_name, lineno, p);
                                        port_guid = 0;
                                }
                        }
-- 
1.4.2.3


_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to