etc: add generic linux compatibility code
authorshefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sat, 28 Feb 2009 18:50:05 +0000 (18:50 +0000)
committershefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sat, 28 Feb 2009 18:50:05 +0000 (18:50 +0000)
To support the porting of OFED code, such as the infiniband-diags, provide a
set of linux compatible include files and functions.

This adds a set of header files under inc/user/linux so #include statements
in code will find them.  In some cases, the header files are blank, but in
others, they contain mappings between the linux calls and equivalent windows
calls.

Where more complex functionality is needed, source files are added under
etc/user to provide it, similar to what was done for getopt.

These headers and source files are used to support the OFED infiniband-diags
in the WinOF build environment.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@1993 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

etc/user/inet.c [new file with mode: 0644]
inc/user/linux/_string.h [new file with mode: 0644]
inc/user/linux/arpa/inet.h [new file with mode: 0644]
inc/user/linux/inttypes.h [new file with mode: 0644]
inc/user/linux/netinet/in.h [new file with mode: 0644]
inc/user/linux/unistd.h [new file with mode: 0644]

diff --git a/etc/user/inet.c b/etc/user/inet.c
new file mode 100644 (file)
index 0000000..28e3d5b
--- /dev/null
@@ -0,0 +1,158 @@
+/*\r
+ * Copyright (c) 2009 Intel Corp., Inc.\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
+#include <arpa/inet.h>\r
+\r
+static int inet_pton4(const char *src, struct in_addr *addr)\r
+{\r
+       unsigned long ip;\r
+\r
+       ip = inet_addr(src);\r
+       if (ip == INADDR_NONE)\r
+               return 0;\r
+\r
+       addr->S_un.S_addr = ip;\r
+       return 1;\r
+}\r
+\r
+enum in6_addr_format_state\r
+{\r
+       in6_fs_num,\r
+       in6_fs_colon,\r
+       in6_fs_0_colon,\r
+       in6_fs_0_num\r
+};\r
+\r
+static int inet_check_groups(const char *src)\r
+{\r
+       int i;\r
+       int digits = 0, groups = 0;\r
+       enum in6_addr_format_state state;\r
+\r
+       if (src[0] == ':') {\r
+               if (src[1] == ':') {\r
+                       i = 2;\r
+                       state = in6_fs_0_colon;\r
+               } else {\r
+                       return -1;\r
+               }\r
+       } else {\r
+               i = 0;\r
+               state = in6_fs_num;\r
+       }\r
+\r
+       for (; src[i] != '\0'; i++) {\r
+               if (src[i] == ':') {\r
+\r
+                       switch (state) {\r
+                       case in6_fs_num:\r
+                               state = in6_fs_colon;\r
+                               break;\r
+                       case in6_fs_colon:\r
+                       case in6_fs_0_num:\r
+                               state = in6_fs_0_colon;\r
+                               break;\r
+                       default:\r
+                               return -1;\r
+                       }\r
+                       digits = 0;\r
+\r
+               } else if (isxdigit(src[i]) && digits++ < 4) {\r
+\r
+                       switch (state) {\r
+                       case in6_fs_colon:\r
+                               state = in6_fs_num;\r
+                               groups++;\r
+                               break;\r
+                       case in6_fs_0_colon:\r
+                               state = in6_fs_0_num;\r
+                               groups++;\r
+                               break;\r
+                       default:\r
+                               break;\r
+                       }\r
+               } else {\r
+                       return -1;\r
+               }\r
+       }\r
+\r
+       if (groups > 8 || state == in6_fs_colon)\r
+               return -1;\r
+       \r
+       return groups;\r
+}\r
+\r
+/*\r
+ * We don't handle the format x:x:x:x:x:x:d.d.d.d\r
+ */\r
+static int inet_pton6(const char *src, struct in6_addr *addr)\r
+{\r
+       const char *pos;\r
+       int i, skip;\r
+\r
+       skip = 8 - inet_check_groups(src);\r
+       if (skip > 8)\r
+               return -1;\r
+\r
+       memset(addr, 0, sizeof(*addr));\r
+       if (src[0] == ':') {\r
+               pos = src + 2;\r
+               i = skip;\r
+       } else {\r
+               pos = src;\r
+               i = 0;\r
+       }\r
+\r
+       for (; i < 8; i++) {\r
+               addr->u.Word[i] = htons((u_short) strtoul(pos, (char **) &pos, 16));\r
+               pos++;\r
+               if (*pos == ':') {\r
+                       pos++;\r
+                       i += skip;\r
+               }\r
+       }\r
+\r
+       return 1;\r
+}\r
+\r
+int inet_pton(int af, const char *src, void *dst)\r
+{\r
+       switch (af) {\r
+       case AF_INET:\r
+               return inet_pton4(src, dst);\r
+       case AF_INET6:\r
+               return inet_pton6(src, dst);\r
+       default:\r
+               return -1;\r
+       }\r
+}\r
diff --git a/inc/user/linux/_string.h b/inc/user/linux/_string.h
new file mode 100644 (file)
index 0000000..449dd89
--- /dev/null
@@ -0,0 +1,44 @@
+/*\r
+ * Copyright (c) 2009 Intel Corp, Inc.  All rights reserved.\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 __STRING_H_\r
+#define __STRING_H_\r
+\r
+#include <string.h>\r
+\r
+#define strdup _strdup\r
+#define strdupa _strdup\r
+#define strncasecmp _strnicmp\r
+#define strtoull _strtoui64\r
+\r
+#endif /* __STRING_H_ */\r
diff --git a/inc/user/linux/arpa/inet.h b/inc/user/linux/arpa/inet.h
new file mode 100644 (file)
index 0000000..2c7b53c
--- /dev/null
@@ -0,0 +1,43 @@
+/*\r
+ * Copyright (c) 2009 Intel Corp, Inc.  All rights reserved.\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 _INET_H_\r
+#define _INET_H_\r
+\r
+#include <ws2tcpip.h>\r
+\r
+#if WINVER < 0x600\r
+int inet_pton(int af, const char *src, void *dst);\r
+#endif\r
+\r
+#endif /* _INET_H_ */\r
diff --git a/inc/user/linux/inttypes.h b/inc/user/linux/inttypes.h
new file mode 100644 (file)
index 0000000..1977666
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2009 Intel Corp, Inc.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#ifndef _INTTYPES_H_
+#define _INTTYPES_H_
+
+#endif /* _INTTYPES_H_ */
diff --git a/inc/user/linux/netinet/in.h b/inc/user/linux/netinet/in.h
new file mode 100644 (file)
index 0000000..4c84a6b
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2009 Intel Corp, Inc.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#ifndef _IN_H_
+#define _IN_H_
+
+#endif /* _IN_H_ */
diff --git a/inc/user/linux/unistd.h b/inc/user/linux/unistd.h
new file mode 100644 (file)
index 0000000..6d17e37
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2009 Intel Corp, Inc.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#ifndef _UNISTD_H_
+#define _UNISTD_H_
+
+#include <stdio.h>
+
+#define sleep(s) SleepEx(s * 1000, TRUE)
+
+static __inline int getdomainname(char *name, size_t len)
+{
+       return -1;
+}
+
+static __inline char* getpass(char *message)
+{
+       static char password[128];
+
+       printf("%s", message);
+       scanf_s("%127s", password, 128);
+       return password;
+}
+
+#endif /* _UNISTD_H_ */