From 8793466326dd10b0d2dbb83c64beff5cc8c0fc7d Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Wed, 13 Jun 2018 23:11:58 -0700 Subject: [PATCH] Rename poll.h to vm_poll.h musl libc's system headers pulls in open-vm-tools' poll.h. To avoid this we rename poll.h to vm_poll.h. Signed-off-by: Natanael Copa Signed-off-by: Khem Raj --- open-vm-tools/lib/asyncsocket/asyncsocket.c | 2 +- open-vm-tools/lib/hgfsServer/hgfsServer.c | 2 +- open-vm-tools/lib/include/asyncsocket.h | 2 +- open-vm-tools/lib/include/pollImpl.h | 2 +- open-vm-tools/lib/include/{poll.h => vm_poll.h} | 2 +- open-vm-tools/lib/rpcIn/rpcin.c | 2 +- .../services/plugins/grabbitmqProxy/grabbitmqProxyPlugin.c | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) rename open-vm-tools/lib/include/{poll.h => vm_poll.h} (99%) --- a/open-vm-tools/lib/asyncsocket/asyncsocket.c +++ b/open-vm-tools/lib/asyncsocket/asyncsocket.c @@ -86,7 +86,7 @@ #include "random.h" #include "asyncsocket.h" #include "asyncSocketBase.h" -#include "poll.h" +#include "vm_poll.h" #include "log.h" #include "err.h" #include "hostinfo.h" --- a/open-vm-tools/lib/hgfsServer/hgfsServer.c +++ b/open-vm-tools/lib/hgfsServer/hgfsServer.c @@ -48,7 +48,7 @@ #include "hgfsServerOplock.h" #include "hgfsDirNotify.h" #include "userlock.h" -#include "poll.h" +#include "vm_poll.h" #include "mutexRankLib.h" #include "vm_basic_asm.h" #include "unicodeOperations.h" --- a/open-vm-tools/lib/include/asyncsocket.h +++ b/open-vm-tools/lib/include/asyncsocket.h @@ -164,7 +164,7 @@ typedef struct AsyncSocket AsyncSocket; * Or the client can specify its favorite poll class and locking behavior. * Use of IVmdbPoll is only supported for regular sockets and for Attach. */ -#include "poll.h" +#include "vm_poll.h" struct IVmdbPoll; typedef struct AsyncSocketPollParams { int flags; /* Default 0, only POLL_FLAG_NO_BULL is valid */ --- a/open-vm-tools/lib/include/pollImpl.h +++ b/open-vm-tools/lib/include/pollImpl.h @@ -44,7 +44,7 @@ #define INCLUDE_ALLOW_USERLEVEL #include "includeCheck.h" -#include "poll.h" +#include "vm_poll.h" #include "vm_basic_asm.h" #if defined(__cplusplus) --- a/open-vm-tools/lib/include/poll.h +++ /dev/null @@ -1,330 +0,0 @@ -/********************************************************* - * Copyright (C) 1998-2018 VMware, Inc. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation version 2.1 and no later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - *********************************************************/ - -/********************************************************* - * The contents of this file are subject to the terms of the Common - * Development and Distribution License (the "License") version 1.0 - * and no later version. You may not use this file except in - * compliance with the License. - * - * You can obtain a copy of the License at - * http://www.opensource.org/licenses/cddl1.php - * - * See the License for the specific language governing permissions - * and limitations under the License. - * - *********************************************************/ - - -#ifndef _POLL_H_ -#define _POLL_H_ - -#define INCLUDE_ALLOW_USERLEVEL -#define INCLUDE_ALLOW_VMCORE -#include "includeCheck.h" - -#include "vm_basic_types.h" -#include "vm_basic_defs.h" -#include "vmware.h" -#include "userlock.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifdef _WIN32 -#define HZ 100 -#elif defined linux -#include -#elif __APPLE__ -#include -/* - * Old SDKs don't define TARGET_OS_IPHONE at all. - * New ones define it to 0 on Mac OS X, 1 on iOS. - */ -#if !defined(TARGET_OS_IPHONE) || TARGET_OS_IPHONE == 0 -#include -#endif -#include -#define HZ 100 -#endif -#ifdef __ANDROID__ -/* - * of android should be included, but its name is same - * with this file. So its content is put here to avoid conflict. - */ -#include -#define HZ 100 -typedef unsigned int nfds_t; -int poll(struct pollfd *, nfds_t, long); -#endif - - -/* - * Poll event types: each type has a different reason for firing, - * or condition that must be met before firing. - */ - -typedef enum { - /* - * Actual Poll queue types against which you can register callbacks. - */ - POLL_VIRTUALREALTIME = -1, /* Negative because it doesn't have its own Q */ - POLL_VTIME = 0, - POLL_REALTIME, - POLL_DEVICE, - POLL_MAIN_LOOP, - POLL_NUM_QUEUES -} PollEventType; - - -/* - * Classes of events - * - * These are the predefined classes. More can be declared - * with Poll_AllocClass(). - */ - -typedef enum PollClass { - POLL_CLASS_MAIN, - POLL_CLASS_PAUSE, - POLL_CLASS_IPC, - POLL_CLASS_CPT, - POLL_CLASS_MKS, - POLL_FIXED_CLASSES, - POLL_DEFAULT_FIXED_CLASSES, - /* Size enum to maximum */ - POLL_MAX_CLASSES = 31, -} PollClass; - -/* - * Do not use; Special pseudo private poll class supported by - * PollDefault only - */ -#define POLL_DEFAULT_CLASS_NET POLL_FIXED_CLASSES -#define POLL_DEFAULT_CS_NET PollClassSet_Singleton(POLL_DEFAULT_CLASS_NET) - -/* - * Each callback is registered in a set of classes - */ - -typedef struct PollClassSet { - uintptr_t bits; -} PollClassSet; - -/* An empty PollClassSet. */ -static INLINE PollClassSet -PollClassSet_Empty(void) -{ - PollClassSet set = { 0 }; - return set; -} - -/* A PollClassSet with the single member. */ -static INLINE PollClassSet -PollClassSet_Singleton(PollClass c) -{ - PollClassSet s = PollClassSet_Empty(); - - ASSERT_ON_COMPILE(POLL_MAX_CLASSES < sizeof s.bits * 8); - ASSERT(c < POLL_MAX_CLASSES); - - s.bits = CONST3264U(1) << c; - return s; -} - -/* Combine two PollClassSets. */ -static INLINE PollClassSet -PollClassSet_Union(PollClassSet lhs, PollClassSet rhs) -{ - PollClassSet set; - set.bits = lhs.bits | rhs.bits; - return set; -} - -/* Add single class to PollClassSet. */ -static INLINE PollClassSet -PollClassSet_Include(PollClassSet set, PollClass c) -{ - return PollClassSet_Union(set, PollClassSet_Singleton(c)); -} - - -#define POLL_CS_MAIN PollClassSet_Singleton(POLL_CLASS_MAIN) -#define POLL_CS_PAUSE PollClassSet_Union(POLL_CS_MAIN, \ - PollClassSet_Singleton(POLL_CLASS_PAUSE)) -#define POLL_CS_CPT PollClassSet_Union(POLL_CS_PAUSE, \ - PollClassSet_Singleton(POLL_CLASS_CPT)) -#define POLL_CS_IPC PollClassSet_Union(POLL_CS_CPT, \ - PollClassSet_Singleton(POLL_CLASS_IPC)) -#define POLL_CS_VMDB POLL_CS_PAUSE /* POLL_CLASS_VMDB is retired */ -#define POLL_CS_MKS PollClassSet_Singleton(POLL_CLASS_MKS) -/* - * DANGER. You don't need POLL_CS_ALWAYS. Really. So don't use it. - */ -#define POLL_CS_ALWAYS PollClassSet_Union(POLL_CS_CPT, POLL_CS_IPC) - -/* - * Poll class-set taxonomy: - * POLL_CS_MAIN - * - Unless you NEED another class, use POLL_CS_MAIN. - * POLL_CS_PAUSE - * - For callbacks that must occur even if the guest is paused. - * Most VMDB or Foundry commands are in this category. - * POLL_CS_CPT - * - Only for callbacks which can trigger intermediate Checkpoint - * transitions. - * The ONLY such callback is Migrate. - * POLL_CS_IPC - * - Only for callbacks which can contain Msg_(Post|Hint|Question) - * responses, and for signal handlers (why)? - * Vigor, VMDB, and Foundry can contain Msg_* responses. - * POLL_CS_MKS - * - Callback runs in MKS thread. - * POLL_CS_ALWAYS - * - Only for events that must be processed immediately. - * The ONLY such callback is OvhdMemVmxSizeCheck. - */ - - -/* - * Poll_Callback flags - */ - -#define POLL_FLAG_PERIODIC 0x01 // keep after firing -#define POLL_FLAG_REMOVE_AT_POWEROFF 0x02 // self-explanatory -#define POLL_FLAG_READ 0x04 // device is ready for reading -#define POLL_FLAG_WRITE 0x08 // device is ready for writing -#define POLL_FLAG_SOCKET 0x10 // device is a Windows socket -#define POLL_FLAG_NO_BULL 0x20 // callback does its own locking -#define POLL_FLAG_WINSOCK 0x40 // Winsock style write events -#define POLL_FLAG_FD 0x80 // device is a Windows file descriptor. -#define POLL_FLAG_ACCEPT_INVALID_FDS 0x100 // For broken 3rd party libs, e.g. curl -#define POLL_FLAG_THUNK_TO_WND 0x200 // thunk callback to window message loop - - -typedef void (*PollerFunction)(void *clientData); -typedef void (*PollerFireWrapper)(PollerFunction func, - void *funcData, - void *wrapperData); -typedef Bool (*PollerErrorFn)(const char *errorStr); - -/* - * Initialisers: - * - * For the sake of convenience, we declare the initialisers - * for custom implmentations here, even though the actual - * implementations are distinct from the core poll code. - */ - -typedef struct PollOptions { - Bool locked; // Use internal MXUser for locking - Bool allowFullQueue; // Don't assert when device event queue is full. - VThreadID windowsMsgThread; // thread that processes Windows messages - PollerFireWrapper fireWrapperFn; // optional; may be useful for stats - void *fireWrapperData; // optional - PollerErrorFn errorFn; // optional; called upon unrecoverable error -} PollOptions; - - -void Poll_InitDefault(void); -void Poll_InitDefaultEx(const PollOptions *opts); -void Poll_InitGtk(void); // On top of glib for Linux -void Poll_InitCF(void); // On top of CoreFoundation for OSX - - -/* - * Functions - */ -int Poll_SocketPair(Bool vmci, Bool stream, int fds[2]); -void Poll_Loop(Bool loop, Bool *exit, PollClass c); -void Poll_LoopTimeout(Bool loop, Bool *exit, PollClass c, int timeout); -Bool Poll_LockingEnabled(void); -void Poll_Exit(void); - - -/* - * Poll_Callback adds a callback regardless of whether an identical one exists. - * The exception to this rule is POLL_DEVICE callbacks: there is a maximum of - * one read and one write callback per fd. - * - * Poll_CallbackRemove removes one callback. If there are multiple identical - * callbacks, which one is removed is an implementation detail. Note that in - * the case of POLL_DEVICE and POLL_REALTIME callbacks, the fd/delay used to - * create the callback is not specified when removing, so all callbacks - * of those types with the same flags, function, and clientData are considered - * "identical" even if their fd/delay differed. - */ - -VMwareStatus Poll_Callback(PollClassSet classSet, - int flags, - PollerFunction f, - void *clientData, - PollEventType type, - PollDevHandle info, // fd/microsec delay - MXUserRecLock *lck); -Bool Poll_CallbackRemove(PollClassSet classSet, - int flags, - PollerFunction f, - void *clientData, - PollEventType type); -Bool Poll_CallbackRemoveOneByCB(PollClassSet classSet, - int flags, - PollerFunction f, - PollEventType type, - void **clientData); - -void Poll_NotifyChange(PollClassSet classSet); - -/* - * Wrappers for Poll_Callback and Poll_CallbackRemove that present - * simpler subsets of those interfaces. - */ - -VMwareStatus Poll_CB_Device(PollerFunction f, - void *clientData, - PollDevHandle device, - Bool periodic); - -Bool Poll_CB_DeviceRemove(PollerFunction f, - void *clientData, - Bool periodic); - - -VMwareStatus Poll_CB_RTime(PollerFunction f, - void *clientData, - int64 delay, // microseconds - Bool periodic, - MXUserRecLock *lock); - -Bool Poll_CB_RTimeRemove(PollerFunction f, - void *clientData, - Bool periodic); - - -#ifdef _WIN32 -void Poll_SetPumpsWindowsMessages(Bool pumps); -void Poll_SetWindowMessageRecipient(HWND hWnd, UINT msg, Bool alwaysThunk); -Bool Poll_FireWndCallback(void *lparam); -#endif - -#if defined(__cplusplus) -} // extern "C" -#endif - -#endif // _POLL_H_ --- /dev/null +++ b/open-vm-tools/lib/include/vm_poll.h @@ -0,0 +1,330 @@ +/********************************************************* + * Copyright (C) 1998-2018 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation version 2.1 and no later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + *********************************************************/ + +/********************************************************* + * The contents of this file are subject to the terms of the Common + * Development and Distribution License (the "License") version 1.0 + * and no later version. You may not use this file except in + * compliance with the License. + * + * You can obtain a copy of the License at + * http://www.opensource.org/licenses/cddl1.php + * + * See the License for the specific language governing permissions + * and limitations under the License. + * + *********************************************************/ + + +#ifndef _POLL_H_ +#define _POLL_H_ + +#define INCLUDE_ALLOW_USERLEVEL +#define INCLUDE_ALLOW_VMCORE +#include "includeCheck.h" + +#include "vm_basic_types.h" +#include "vm_basic_defs.h" +#include "vmware.h" +#include "userlock.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +#ifdef _WIN32 +#define HZ 100 +#elif defined linux +#include +#elif __APPLE__ +#include +/* + * Old SDKs don't define TARGET_OS_IPHONE at all. + * New ones define it to 0 on Mac OS X, 1 on iOS. + */ +#if !defined(TARGET_OS_IPHONE) || TARGET_OS_IPHONE == 0 +#include +#endif +#include +#define HZ 100 +#endif +#ifdef __ANDROID__ +/* + * of android should be included, but its name is same + * with this file. So its content is put here to avoid conflict. + */ +#include +#define HZ 100 +typedef unsigned int nfds_t; +int poll(struct pollfd *, nfds_t, long); +#endif + + +/* + * Poll event types: each type has a different reason for firing, + * or condition that must be met before firing. + */ + +typedef enum { + /* + * Actual Poll queue types against which you can register callbacks. + */ + POLL_VIRTUALREALTIME = -1, /* Negative because it doesn't have its own Q */ + POLL_VTIME = 0, + POLL_REALTIME, + POLL_DEVICE, + POLL_MAIN_LOOP, + POLL_NUM_QUEUES +} PollEventType; + + +/* + * Classes of events + * + * These are the predefined classes. More can be declared + * with Poll_AllocClass(). + */ + +typedef enum PollClass { + POLL_CLASS_MAIN, + POLL_CLASS_PAUSE, + POLL_CLASS_IPC, + POLL_CLASS_CPT, + POLL_CLASS_MKS, + POLL_FIXED_CLASSES, + POLL_DEFAULT_FIXED_CLASSES, + /* Size enum to maximum */ + POLL_MAX_CLASSES = 31, +} PollClass; + +/* + * Do not use; Special pseudo private poll class supported by + * PollDefault only + */ +#define POLL_DEFAULT_CLASS_NET POLL_FIXED_CLASSES +#define POLL_DEFAULT_CS_NET PollClassSet_Singleton(POLL_DEFAULT_CLASS_NET) + +/* + * Each callback is registered in a set of classes + */ + +typedef struct PollClassSet { + uintptr_t bits; +} PollClassSet; + +/* An empty PollClassSet. */ +static INLINE PollClassSet +PollClassSet_Empty(void) +{ + PollClassSet set = { 0 }; + return set; +} + +/* A PollClassSet with the single member. */ +static INLINE PollClassSet +PollClassSet_Singleton(PollClass c) +{ + PollClassSet s = PollClassSet_Empty(); + + ASSERT_ON_COMPILE(POLL_MAX_CLASSES < sizeof s.bits * 8); + ASSERT(c < POLL_MAX_CLASSES); + + s.bits = CONST3264U(1) << c; + return s; +} + +/* Combine two PollClassSets. */ +static INLINE PollClassSet +PollClassSet_Union(PollClassSet lhs, PollClassSet rhs) +{ + PollClassSet set; + set.bits = lhs.bits | rhs.bits; + return set; +} + +/* Add single class to PollClassSet. */ +static INLINE PollClassSet +PollClassSet_Include(PollClassSet set, PollClass c) +{ + return PollClassSet_Union(set, PollClassSet_Singleton(c)); +} + + +#define POLL_CS_MAIN PollClassSet_Singleton(POLL_CLASS_MAIN) +#define POLL_CS_PAUSE PollClassSet_Union(POLL_CS_MAIN, \ + PollClassSet_Singleton(POLL_CLASS_PAUSE)) +#define POLL_CS_CPT PollClassSet_Union(POLL_CS_PAUSE, \ + PollClassSet_Singleton(POLL_CLASS_CPT)) +#define POLL_CS_IPC PollClassSet_Union(POLL_CS_CPT, \ + PollClassSet_Singleton(POLL_CLASS_IPC)) +#define POLL_CS_VMDB POLL_CS_PAUSE /* POLL_CLASS_VMDB is retired */ +#define POLL_CS_MKS PollClassSet_Singleton(POLL_CLASS_MKS) +/* + * DANGER. You don't need POLL_CS_ALWAYS. Really. So don't use it. + */ +#define POLL_CS_ALWAYS PollClassSet_Union(POLL_CS_CPT, POLL_CS_IPC) + +/* + * Poll class-set taxonomy: + * POLL_CS_MAIN + * - Unless you NEED another class, use POLL_CS_MAIN. + * POLL_CS_PAUSE + * - For callbacks that must occur even if the guest is paused. + * Most VMDB or Foundry commands are in this category. + * POLL_CS_CPT + * - Only for callbacks which can trigger intermediate Checkpoint + * transitions. + * The ONLY such callback is Migrate. + * POLL_CS_IPC + * - Only for callbacks which can contain Msg_(Post|Hint|Question) + * responses, and for signal handlers (why)? + * Vigor, VMDB, and Foundry can contain Msg_* responses. + * POLL_CS_MKS + * - Callback runs in MKS thread. + * POLL_CS_ALWAYS + * - Only for events that must be processed immediately. + * The ONLY such callback is OvhdMemVmxSizeCheck. + */ + + +/* + * Poll_Callback flags + */ + +#define POLL_FLAG_PERIODIC 0x01 // keep after firing +#define POLL_FLAG_REMOVE_AT_POWEROFF 0x02 // self-explanatory +#define POLL_FLAG_READ 0x04 // device is ready for reading +#define POLL_FLAG_WRITE 0x08 // device is ready for writing +#define POLL_FLAG_SOCKET 0x10 // device is a Windows socket +#define POLL_FLAG_NO_BULL 0x20 // callback does its own locking +#define POLL_FLAG_WINSOCK 0x40 // Winsock style write events +#define POLL_FLAG_FD 0x80 // device is a Windows file descriptor. +#define POLL_FLAG_ACCEPT_INVALID_FDS 0x100 // For broken 3rd party libs, e.g. curl +#define POLL_FLAG_THUNK_TO_WND 0x200 // thunk callback to window message loop + + +typedef void (*PollerFunction)(void *clientData); +typedef void (*PollerFireWrapper)(PollerFunction func, + void *funcData, + void *wrapperData); +typedef Bool (*PollerErrorFn)(const char *errorStr); + +/* + * Initialisers: + * + * For the sake of convenience, we declare the initialisers + * for custom implmentations here, even though the actual + * implementations are distinct from the core poll code. + */ + +typedef struct PollOptions { + Bool locked; // Use internal MXUser for locking + Bool allowFullQueue; // Don't assert when device event queue is full. + VThreadID windowsMsgThread; // thread that processes Windows messages + PollerFireWrapper fireWrapperFn; // optional; may be useful for stats + void *fireWrapperData; // optional + PollerErrorFn errorFn; // optional; called upon unrecoverable error +} PollOptions; + + +void Poll_InitDefault(void); +void Poll_InitDefaultEx(const PollOptions *opts); +void Poll_InitGtk(void); // On top of glib for Linux +void Poll_InitCF(void); // On top of CoreFoundation for OSX + + +/* + * Functions + */ +int Poll_SocketPair(Bool vmci, Bool stream, int fds[2]); +void Poll_Loop(Bool loop, Bool *exit, PollClass c); +void Poll_LoopTimeout(Bool loop, Bool *exit, PollClass c, int timeout); +Bool Poll_LockingEnabled(void); +void Poll_Exit(void); + + +/* + * Poll_Callback adds a callback regardless of whether an identical one exists. + * The exception to this rule is POLL_DEVICE callbacks: there is a maximum of + * one read and one write callback per fd. + * + * Poll_CallbackRemove removes one callback. If there are multiple identical + * callbacks, which one is removed is an implementation detail. Note that in + * the case of POLL_DEVICE and POLL_REALTIME callbacks, the fd/delay used to + * create the callback is not specified when removing, so all callbacks + * of those types with the same flags, function, and clientData are considered + * "identical" even if their fd/delay differed. + */ + +VMwareStatus Poll_Callback(PollClassSet classSet, + int flags, + PollerFunction f, + void *clientData, + PollEventType type, + PollDevHandle info, // fd/microsec delay + MXUserRecLock *lck); +Bool Poll_CallbackRemove(PollClassSet classSet, + int flags, + PollerFunction f, + void *clientData, + PollEventType type); +Bool Poll_CallbackRemoveOneByCB(PollClassSet classSet, + int flags, + PollerFunction f, + PollEventType type, + void **clientData); + +void Poll_NotifyChange(PollClassSet classSet); + +/* + * Wrappers for Poll_Callback and Poll_CallbackRemove that present + * simpler subsets of those interfaces. + */ + +VMwareStatus Poll_CB_Device(PollerFunction f, + void *clientData, + PollDevHandle device, + Bool periodic); + +Bool Poll_CB_DeviceRemove(PollerFunction f, + void *clientData, + Bool periodic); + + +VMwareStatus Poll_CB_RTime(PollerFunction f, + void *clientData, + int64 delay, // microseconds + Bool periodic, + MXUserRecLock *lock); + +Bool Poll_CB_RTimeRemove(PollerFunction f, + void *clientData, + Bool periodic); + + +#ifdef _WIN32 +void Poll_SetPumpsWindowsMessages(Bool pumps); +void Poll_SetWindowMessageRecipient(HWND hWnd, UINT msg, Bool alwaysThunk); +Bool Poll_FireWndCallback(void *lparam); +#endif + +#if defined(__cplusplus) +} // extern "C" +#endif + +#endif // _POLL_H_ --- a/open-vm-tools/lib/rpcIn/rpcin.c +++ b/open-vm-tools/lib/rpcIn/rpcin.c @@ -57,7 +57,7 @@ #if defined(VMTOOLS_USE_VSOCKET) # include -# include "poll.h" +# include "vm_poll.h" # include "asyncsocket.h" # include "vmci_defs.h" #include "dataMap.h"