[IBDIAGS] additions: ibdiags_common, cl_nodenamemap.* until its future rework.
authorstansmith <stansmith@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 27 Jan 2009 19:03:36 +0000 (19:03 +0000)
committerstansmith <stansmith@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 27 Jan 2009 19:03:36 +0000 (19:03 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@1896 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

tools/infiniband_diags/include/InfiniBand/complib/cl_nodenamemap.h [new file with mode: 0644]
tools/infiniband_diags/include/ibdiag_common_osd.h [new file with mode: 0644]
tools/infiniband_diags/src/cl_nodenamemap.c [new file with mode: 0644]
tools/infiniband_diags/src/ibdiag_osd.c [new file with mode: 0644]

diff --git a/tools/infiniband_diags/include/InfiniBand/complib/cl_nodenamemap.h b/tools/infiniband_diags/include/InfiniBand/complib/cl_nodenamemap.h
new file mode 100644 (file)
index 0000000..f99a3d6
--- /dev/null
@@ -0,0 +1,67 @@
+/*\r
+ * Copyright (c) 2008 Voltaire, Inc. All rights reserved.\r
+ * Copyright (c) 2007 Lawrence Livermore National Lab\r
+ *\r
+ * This software is available to you under a choice of one of two\r
+ * licenses.  You may choose to be licensed under the terms of the GNU\r
+ * General Public License (GPL) Version 2, available from the file\r
+ * COPYING in the main directory of this source tree, or the\r
+ * OpenIB.org BSD license below:\r
+ *\r
+ *     Redistribution and use in source and binary forms, with or\r
+ *     without modification, are permitted provided that the following\r
+ *     conditions are met:\r
+ *\r
+ *      - Redistributions of source code must retain the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer.\r
+ *\r
+ *      - Redistributions in binary form must reproduce the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer in the documentation and/or other materials\r
+ *        provided with the distribution.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
+ * SOFTWARE.\r
+ *\r
+ */\r
+\r
+#ifndef _CL_NODE_NAME_MAP_H_\r
+#define _CL_NODE_NAME_MAP_H_\r
+\r
+#include <stdio.h>\r
+#if !defined(_WIN32)\r
+#include <stdint.h>\r
+#endif\r
+#include <complib/cl_qmap.h>\r
+\r
+/* NOTE: this may modify the parameter "nodedesc". */\r
+char *clean_nodedesc(char *nodedesc);\r
+\r
+typedef struct _name_map_item {\r
+       cl_map_item_t item;\r
+       uint64_t guid;\r
+       char *name;\r
+} name_map_item_t;\r
+\r
+typedef cl_qmap_t nn_map_t;\r
+\r
+/**\r
+ * Node name map interface.\r
+ * It is OK to pass NULL for the node_name_map[_fp] parameters.\r
+ */\r
+nn_map_t *open_node_name_map(char *node_name_map);\r
+void  close_node_name_map(nn_map_t *map);\r
+char *remap_node_name(nn_map_t *map, uint64_t target_guid,\r
+                       char *nodedesc);\r
+       /* NOTE: parameter "nodedesc" may be modified here. */\r
+int parse_node_map(const char *file_name,\r
+                  int (*create)(void *, uint64_t, char *), void *cxt);\r
+\r
+#endif                         /* _CL_NODE_NAME_MAP_H_ */\r
diff --git a/tools/infiniband_diags/include/ibdiag_common_osd.h b/tools/infiniband_diags/include/ibdiag_common_osd.h
new file mode 100644 (file)
index 0000000..313e2a5
--- /dev/null
@@ -0,0 +1,80 @@
+/*\r
+ * Copyright (c) 2009 Intel Corporation. All rights reserved.\r
+ *\r
+ * This software is available to you under the OpenIB.org BSD license\r
+ * below:\r
+ *\r
+ *     Redistribution and use in source and binary forms, with or\r
+ *     without modification, are permitted provided that the following\r
+ *     conditions are met:\r
+ *\r
+ *      - Redistributions of source code must retain the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer.\r
+ *\r
+ *      - Redistributions in binary form must reproduce the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer in the documentation and/or other materials\r
+ *        provided with the distribution.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AWV\r
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
+ * SOFTWARE.\r
+ */\r
+\r
+#ifndef _IBDIAG_COMMON_OSD_H_\r
+#define _IBDIAG_COMMON_OSD_H_\r
+\r
+#include <string.h>\r
+#include <windows.h>\r
+#include <winsock2.h>\r
+#include <ws2tcpip.h>\r
+#include <winbase.h>\r
+\r
+#include <getopt.h>\r
+\r
+#if !defined( __cplusplus )\r
+#define inline __inline\r
+#endif\r
+\r
+#if !defined(getpid)\r
+    #define getpid GetCurrentProcessId\r
+#endif\r
+\r
+#define strdup _strdup\r
+#if !defined(strtoull)\r
+#define strtoull _strtoui64\r
+#endif\r
+\r
+#if i386\r
+#define _CDECL __cdecl\r
+#else\r
+#define _CDECL\r
+#endif\r
+\r
+#define getdomainname(name,len) 0 \r
+#define getcurrenttime() 0\r
+#define signal(a,b)\r
+#define sleep(sec) SleepEx((sec)*1000,TRUE)\r
+\r
+#if 0\r
+static inline uint64_t getcurrenttime(void)\r
+{\r
+       LARGE_INTEGER tick_count, frequency;\r
+\r
+       if(!QueryPerformanceFrequency(&frequency))\r
+               return(0);\r
+\r
+       if(!QueryPerformanceCounter(&tick_count))\r
+               return(0);\r
+\r
+       return(tick_count.QuadPart/(frequency.QuadPart/1000000ULL));\r
+}\r
+#endif\r
+\r
+#endif /* _IBDIAG_COMMON_OSD_H_ */\r
diff --git a/tools/infiniband_diags/src/cl_nodenamemap.c b/tools/infiniband_diags/src/cl_nodenamemap.c
new file mode 100644 (file)
index 0000000..0d26471
--- /dev/null
@@ -0,0 +1,197 @@
+/*\r
+ * Copyright (c) 2008 Voltaire, Inc. All rights reserved.\r
+ * Copyright (c) 2007 Lawrence Livermore National Lab\r
+ *\r
+ * This software is available to you under a choice of one of two\r
+ * licenses.  You may choose to be licensed under the terms of the GNU\r
+ * General Public License (GPL) Version 2, available from the file\r
+ * COPYING in the main directory of this source tree, or the\r
+ * OpenIB.org BSD license below:\r
+ *\r
+ *     Redistribution and use in source and binary forms, with or\r
+ *     without modification, are permitted provided that the following\r
+ *     conditions are met:\r
+ *\r
+ *      - Redistributions of source code must retain the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer.\r
+ *\r
+ *      - Redistributions in binary form must reproduce the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer in the documentation and/or other materials\r
+ *        provided with the distribution.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
+ * SOFTWARE.\r
+ *\r
+ */\r
+\r
+#define _GNU_SOURCE\r
+#include <stdio.h>\r
+#include <errno.h>\r
+#include <string.h>\r
+#include <stdlib.h>\r
+#if !defined(_WIN32)\r
+#include <stdarg.h>\r
+#include <sys/types.h>\r
+#include <sys/stat.h>\r
+#include <unistd.h>\r
+#include <ctype.h>\r
+#ifdef HAVE_CONFIG\r
+#include <config.h>\r
+#endif\r
+#endif\r
+\r
+#include <ibdiag_common.h>\r
+#include <complib/cl_nodenamemap.h>\r
+\r
+static int map_name(void *cxt, uint64_t guid, char *p)\r
+{\r
+       cl_qmap_t *map = cxt;\r
+       name_map_item_t *item;\r
+\r
+       p = strtok(p, "\"#");\r
+       if (!p)\r
+               return 0;\r
+\r
+       item = malloc(sizeof(*item));\r
+       if (!item)\r
+               return -1;\r
+       item->guid = guid;\r
+       item->name = strdup(p);\r
+       cl_qmap_insert(map, item->guid, (cl_map_item_t *)item);\r
+       return 0;\r
+}\r
+\r
+nn_map_t *\r
+open_node_name_map(char *node_name_map)\r
+{\r
+       nn_map_t *map;\r
+\r
+       if (!node_name_map) {\r
+#ifdef HAVE_DEFAULT_NODENAME_MAP\r
+               struct stat buf;\r
+               node_name_map = HAVE_DEFAULT_NODENAME_MAP;\r
+               if (stat(node_name_map, &buf))\r
+                       return NULL;\r
+#else\r
+               return NULL;\r
+#endif /* HAVE_DEFAULT_NODENAME_MAP */\r
+       }\r
+\r
+       map = malloc(sizeof(*map));\r
+       if (!map)\r
+               return NULL;\r
+       cl_qmap_init(map);\r
+\r
+       if (parse_node_map(node_name_map, map_name, map)) {\r
+               fprintf(stderr,\r
+                       "WARNING failed to open node name map \"%s\" (%s)\n",\r
+                       node_name_map, strerror(errno));\r
+                       close_node_name_map(map);\r
+                       return NULL;\r
+       }\r
+\r
+       return map;\r
+}\r
+\r
+void\r
+close_node_name_map(nn_map_t *map)\r
+{\r
+       name_map_item_t *item = NULL;\r
+\r
+       if (!map)\r
+               return;\r
+\r
+       item = (name_map_item_t *)cl_qmap_head(map);\r
+       while (item != (name_map_item_t *)cl_qmap_end(map)) {\r
+               item = (name_map_item_t *)cl_qmap_remove(map, item->guid);\r
+               free(item->name);\r
+               free(item);\r
+               item = (name_map_item_t *)cl_qmap_head(map);\r
+       }\r
+       free(map);\r
+}\r
+\r
+char *\r
+remap_node_name(nn_map_t *map, uint64_t target_guid, char *nodedesc)\r
+{\r
+       char *rc = NULL;\r
+       name_map_item_t *item = NULL;\r
+\r
+       if (!map)\r
+               goto done;\r
+\r
+       item = (name_map_item_t *)cl_qmap_get(map, target_guid);\r
+       if (item != (name_map_item_t *)cl_qmap_end(map))\r
+               rc = strdup(item->name);\r
+\r
+done:\r
+       if (rc == NULL)\r
+               rc = strdup(clean_nodedesc(nodedesc));\r
+       return (rc);\r
+}\r
+\r
+char *\r
+clean_nodedesc(char *nodedesc)\r
+{\r
+       int i = 0;\r
+\r
+       nodedesc[63] = '\0';\r
+       while (nodedesc[i]) {\r
+               if (!isprint(nodedesc[i]))\r
+                       nodedesc[i] = ' ';\r
+               i++;\r
+       }\r
+\r
+       return (nodedesc);\r
+}\r
+\r
+int parse_node_map(const char *file_name,\r
+                  int (*create)(void *, uint64_t, char *), void *cxt)\r
+{\r
+       char line[256];\r
+       FILE *f;\r
+\r
+       if (!(f = fopen(file_name, "r")))\r
+               return -1;\r
+\r
+       while (fgets(line, sizeof(line), f)) {\r
+               uint64_t guid;\r
+               char *p, *e;\r
+\r
+               p = line;\r
+               while (isspace(*p))\r
+                       p++;\r
+               if (*p == '\0' || *p == '\n' || *p == '#')\r
+                       continue;\r
+\r
+               guid = strtoull(p, &e, 0);\r
+               if (e == p || (!isspace(*e) && *e != '#' && *e != '\0')) {\r
+                       fclose(f);\r
+                       return -1;\r
+               }\r
+\r
+               p = e;\r
+               while (isspace(*p))\r
+                       p++;\r
+\r
+               e = strpbrk(p, "\n");\r
+               if (e)\r
+                       *e = '\0';\r
+\r
+               if (create(cxt, guid, p)) {\r
+                       fclose(f);\r
+                       return -1;\r
+               }\r
+       }\r
+\r
+       fclose(f);\r
+       return 0;\r
+}\r
diff --git a/tools/infiniband_diags/src/ibdiag_osd.c b/tools/infiniband_diags/src/ibdiag_osd.c
new file mode 100644 (file)
index 0000000..e0438ee
--- /dev/null
@@ -0,0 +1,30 @@
+/*\r
+ * Copyright (c) 2009 Intel Corporation. All rights reserved.\r
+ *\r
+ * This software is available to you under the OpenIB.org BSD license\r
+ * below:\r
+ *\r
+ *     Redistribution and use in source and binary forms, with or\r
+ *     without modification, are permitted provided that the following\r
+ *     conditions are met:\r
+ *\r
+ *      - Redistributions of source code must retain the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer.\r
+ *\r
+ *      - Redistributions in binary form must reproduce the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer in the documentation and/or other materials\r
+ *        provided with the distribution.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AWV\r
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
+ * SOFTWARE.\r
+ */\r
+\r
+#include "..\..\..\..\etc\user\getopt.c"\r