* [Qemu-devel] [PATCH v2] qga-win: Updating guest_set_time action
@ 2017-08-22 13:55 Bishara AbuHattoum
2017-08-22 13:56 ` Sameeh Jubran
2017-10-25 22:55 ` Michael Roth
0 siblings, 2 replies; 4+ messages in thread
From: Bishara AbuHattoum @ 2017-08-22 13:55 UTC (permalink / raw)
To: qemu-devel, Michael Roth; +Cc: Sameeh Jubran, Yan Vugenfirer
At the moment, Windows libraries don't provide a way to access
RTC, so, a workaround is to use the Windows w32tm command to
resync the time.
Related bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1183874
Signed-off-by: Bishara AbuHattoum <bishara@daynix.com>
---
configure | 2 +-
qga/commands-win32.c | 36 +++++++++++++++++++++++++++++++++++-
2 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/configure b/configure
index dd73cce62f..2c044ba2ca 100755
--- a/configure
+++ b/configure
@@ -824,7 +824,7 @@ if test "$mingw32" = "yes" ; then
sysconfdir="\${prefix}"
local_statedir=
confsuffix=""
- libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -liphlpapi -lnetapi32 $libs_qga"
+ libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
fi
werror=""
diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 619dbd2bc2..fbd7eb7bbb 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -29,6 +29,7 @@
#endif
#include <lm.h>
#include <wtsapi32.h>
+#include <wininet.h>
#include "qga/guest-agent-core.h"
#include "qga/vss-win32.h"
@@ -1277,8 +1278,41 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
* RTC yet:
*
* https://msdn.microsoft.com/en-us/library/aa908981.aspx
+ *
+ * Instead, a workaround is to use the Windows win32tm command to
+ * resync the time using the Windows Time service.
*/
- error_setg(errp, "Time argument is required on this platform");
+ LPVOID msg_buffer;
+ DWORD ret_flags;
+
+ HRESULT hr = system("w32tm /resync /nowait");
+
+ if (GetLastError() != 0) {
+ strerror_s((LPTSTR) & msg_buffer, 0, errno);
+ error_setg(errp, "system(...) failed: %s", (LPCTSTR)msg_buffer);
+ } else if (hr != 0) {
+ if (hr == HRESULT_FROM_WIN32(ERROR_SERVICE_NOT_ACTIVE)) {
+ error_setg(errp, "Windows Time service not running on the "
+ "guest");
+ } else {
+ if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
+ (DWORD)hr, MAKELANGID(LANG_NEUTRAL,
+ SUBLANG_DEFAULT), (LPTSTR) & msg_buffer, 0,
+ NULL)) {
+ error_setg(errp, "w32tm failed with error (0x%lx), couldn'"
+ "t retrieve error message", hr);
+ } else {
+ error_setg(errp, "w32tm failed with error (0x%lx): %s", hr,
+ (LPCTSTR)msg_buffer);
+ LocalFree(msg_buffer);
+ }
+ }
+ } else if (!InternetGetConnectedState(&ret_flags, 0)) {
+ error_setg(errp, "No internet connection on guest, sync not "
+ "accurate");
+ }
return;
}
--
2.13.5
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [Qemu-devel] [PATCH v2] qga-win: Updating guest_set_time action
2017-08-22 13:55 [Qemu-devel] [PATCH v2] qga-win: Updating guest_set_time action Bishara AbuHattoum
@ 2017-08-22 13:56 ` Sameeh Jubran
2017-10-02 13:04 ` Bishara AbuHattoum
2017-10-25 22:55 ` Michael Roth
1 sibling, 1 reply; 4+ messages in thread
From: Sameeh Jubran @ 2017-08-22 13:56 UTC (permalink / raw)
To: Bishara AbuHattoum; +Cc: QEMU Developers, Michael Roth, Yan Vugenfirer
Reviewed-by: Sameeh Jubran <sameeh@daynix.com>
On Tue, Aug 22, 2017 at 4:55 PM, Bishara AbuHattoum <bishara@daynix.com>
wrote:
> At the moment, Windows libraries don't provide a way to access
> RTC, so, a workaround is to use the Windows w32tm command to
> resync the time.
> Related bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1183874
>
> Signed-off-by: Bishara AbuHattoum <bishara@daynix.com>
> ---
> configure | 2 +-
> qga/commands-win32.c | 36 +++++++++++++++++++++++++++++++++++-
> 2 files changed, 36 insertions(+), 2 deletions(-)
>
> diff --git a/configure b/configure
> index dd73cce62f..2c044ba2ca 100755
> --- a/configure
> +++ b/configure
> @@ -824,7 +824,7 @@ if test "$mingw32" = "yes" ; then
> sysconfdir="\${prefix}"
> local_statedir=
> confsuffix=""
> - libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -liphlpapi -lnetapi32
> $libs_qga"
> + libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi
> -lnetapi32 $libs_qga"
> fi
>
> werror=""
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index 619dbd2bc2..fbd7eb7bbb 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -29,6 +29,7 @@
> #endif
> #include <lm.h>
> #include <wtsapi32.h>
> +#include <wininet.h>
>
> #include "qga/guest-agent-core.h"
> #include "qga/vss-win32.h"
> @@ -1277,8 +1278,41 @@ void qmp_guest_set_time(bool has_time, int64_t
> time_ns, Error **errp)
> * RTC yet:
> *
> * https://msdn.microsoft.com/en-us/library/aa908981.aspx
> + *
> + * Instead, a workaround is to use the Windows win32tm command to
> + * resync the time using the Windows Time service.
> */
> - error_setg(errp, "Time argument is required on this platform");
> + LPVOID msg_buffer;
> + DWORD ret_flags;
> +
> + HRESULT hr = system("w32tm /resync /nowait");
> +
> + if (GetLastError() != 0) {
> + strerror_s((LPTSTR) & msg_buffer, 0, errno);
> + error_setg(errp, "system(...) failed: %s",
> (LPCTSTR)msg_buffer);
> + } else if (hr != 0) {
> + if (hr == HRESULT_FROM_WIN32(ERROR_SERVICE_NOT_ACTIVE)) {
> + error_setg(errp, "Windows Time service not running on the
> "
> + "guest");
> + } else {
> + if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
> + FORMAT_MESSAGE_FROM_SYSTEM |
> + FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
> + (DWORD)hr, MAKELANGID(LANG_NEUTRAL,
> + SUBLANG_DEFAULT), (LPTSTR) &
> msg_buffer, 0,
> + NULL)) {
> + error_setg(errp, "w32tm failed with error (0x%lx),
> couldn'"
> + "t retrieve error message", hr);
> + } else {
> + error_setg(errp, "w32tm failed with error (0x%lx):
> %s", hr,
> + (LPCTSTR)msg_buffer);
> + LocalFree(msg_buffer);
> + }
> + }
> + } else if (!InternetGetConnectedState(&ret_flags, 0)) {
> + error_setg(errp, "No internet connection on guest, sync not "
> + "accurate");
> + }
> return;
> }
>
> --
> 2.13.5
>
>
--
Respectfully,
*Sameeh Jubran*
*Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>*
*Software Engineer @ Daynix <http://www.daynix.com>.*
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [Qemu-devel] [PATCH v2] qga-win: Updating guest_set_time action
2017-08-22 13:56 ` Sameeh Jubran
@ 2017-10-02 13:04 ` Bishara AbuHattoum
0 siblings, 0 replies; 4+ messages in thread
From: Bishara AbuHattoum @ 2017-10-02 13:04 UTC (permalink / raw)
To: Sameeh Jubran; +Cc: QEMU Developers, Michael Roth, Yan Vugenfirer
PING
On Tue, Aug 22, 2017 at 4:56 PM, Sameeh Jubran <sameeh@daynix.com> wrote:
> Reviewed-by: Sameeh Jubran <sameeh@daynix.com>
>
> On Tue, Aug 22, 2017 at 4:55 PM, Bishara AbuHattoum <bishara@daynix.com>
> wrote:
>
>> At the moment, Windows libraries don't provide a way to access
>> RTC, so, a workaround is to use the Windows w32tm command to
>> resync the time.
>> Related bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1183874
>>
>> Signed-off-by: Bishara AbuHattoum <bishara@daynix.com>
>> ---
>> configure | 2 +-
>> qga/commands-win32.c | 36 +++++++++++++++++++++++++++++++++++-
>> 2 files changed, 36 insertions(+), 2 deletions(-)
>>
>> diff --git a/configure b/configure
>> index dd73cce62f..2c044ba2ca 100755
>> --- a/configure
>> +++ b/configure
>> @@ -824,7 +824,7 @@ if test "$mingw32" = "yes" ; then
>> sysconfdir="\${prefix}"
>> local_statedir=
>> confsuffix=""
>> - libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -liphlpapi -lnetapi32
>> $libs_qga"
>> + libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi
>> -lnetapi32 $libs_qga"
>> fi
>>
>> werror=""
>> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
>> index 619dbd2bc2..fbd7eb7bbb 100644
>> --- a/qga/commands-win32.c
>> +++ b/qga/commands-win32.c
>> @@ -29,6 +29,7 @@
>> #endif
>> #include <lm.h>
>> #include <wtsapi32.h>
>> +#include <wininet.h>
>>
>> #include "qga/guest-agent-core.h"
>> #include "qga/vss-win32.h"
>> @@ -1277,8 +1278,41 @@ void qmp_guest_set_time(bool has_time, int64_t
>> time_ns, Error **errp)
>> * RTC yet:
>> *
>> * https://msdn.microsoft.com/en-us/library/aa908981.aspx
>> + *
>> + * Instead, a workaround is to use the Windows win32tm command to
>> + * resync the time using the Windows Time service.
>> */
>> - error_setg(errp, "Time argument is required on this platform");
>> + LPVOID msg_buffer;
>> + DWORD ret_flags;
>> +
>> + HRESULT hr = system("w32tm /resync /nowait");
>> +
>> + if (GetLastError() != 0) {
>> + strerror_s((LPTSTR) & msg_buffer, 0, errno);
>> + error_setg(errp, "system(...) failed: %s",
>> (LPCTSTR)msg_buffer);
>> + } else if (hr != 0) {
>> + if (hr == HRESULT_FROM_WIN32(ERROR_SERVICE_NOT_ACTIVE)) {
>> + error_setg(errp, "Windows Time service not running on
>> the "
>> + "guest");
>> + } else {
>> + if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
>> + FORMAT_MESSAGE_FROM_SYSTEM |
>> + FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
>> + (DWORD)hr, MAKELANGID(LANG_NEUTRAL,
>> + SUBLANG_DEFAULT), (LPTSTR) &
>> msg_buffer, 0,
>> + NULL)) {
>> + error_setg(errp, "w32tm failed with error (0x%lx),
>> couldn'"
>> + "t retrieve error message", hr);
>> + } else {
>> + error_setg(errp, "w32tm failed with error (0x%lx):
>> %s", hr,
>> + (LPCTSTR)msg_buffer);
>> + LocalFree(msg_buffer);
>> + }
>> + }
>> + } else if (!InternetGetConnectedState(&ret_flags, 0)) {
>> + error_setg(errp, "No internet connection on guest, sync not "
>> + "accurate");
>> + }
>> return;
>> }
>>
>> --
>> 2.13.5
>>
>>
>
>
> --
> Respectfully,
> *Sameeh Jubran*
> *Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>*
> *Software Engineer @ Daynix <http://www.daynix.com>.*
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH v2] qga-win: Updating guest_set_time action
2017-08-22 13:55 [Qemu-devel] [PATCH v2] qga-win: Updating guest_set_time action Bishara AbuHattoum
2017-08-22 13:56 ` Sameeh Jubran
@ 2017-10-25 22:55 ` Michael Roth
1 sibling, 0 replies; 4+ messages in thread
From: Michael Roth @ 2017-10-25 22:55 UTC (permalink / raw)
To: Bishara AbuHattoum, qemu-devel; +Cc: Sameeh Jubran, Yan Vugenfirer
Quoting Bishara AbuHattoum (2017-08-22 08:55:04)
> At the moment, Windows libraries don't provide a way to access
> RTC, so, a workaround is to use the Windows w32tm command to
> resync the time.
> Related bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1183874
>
> Signed-off-by: Bishara AbuHattoum <bishara@daynix.com>
Thanks, applied to qga tree:
https://github.com/mdroth/qemu/commits/qga
> ---
> configure | 2 +-
> qga/commands-win32.c | 36 +++++++++++++++++++++++++++++++++++-
> 2 files changed, 36 insertions(+), 2 deletions(-)
>
> diff --git a/configure b/configure
> index dd73cce62f..2c044ba2ca 100755
> --- a/configure
> +++ b/configure
> @@ -824,7 +824,7 @@ if test "$mingw32" = "yes" ; then
> sysconfdir="\${prefix}"
> local_statedir=
> confsuffix=""
> - libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -liphlpapi -lnetapi32 $libs_qga"
> + libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
> fi
>
> werror=""
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index 619dbd2bc2..fbd7eb7bbb 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -29,6 +29,7 @@
> #endif
> #include <lm.h>
> #include <wtsapi32.h>
> +#include <wininet.h>
>
> #include "qga/guest-agent-core.h"
> #include "qga/vss-win32.h"
> @@ -1277,8 +1278,41 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
> * RTC yet:
> *
> * https://msdn.microsoft.com/en-us/library/aa908981.aspx
> + *
> + * Instead, a workaround is to use the Windows win32tm command to
> + * resync the time using the Windows Time service.
> */
> - error_setg(errp, "Time argument is required on this platform");
> + LPVOID msg_buffer;
> + DWORD ret_flags;
> +
> + HRESULT hr = system("w32tm /resync /nowait");
> +
> + if (GetLastError() != 0) {
> + strerror_s((LPTSTR) & msg_buffer, 0, errno);
> + error_setg(errp, "system(...) failed: %s", (LPCTSTR)msg_buffer);
> + } else if (hr != 0) {
> + if (hr == HRESULT_FROM_WIN32(ERROR_SERVICE_NOT_ACTIVE)) {
> + error_setg(errp, "Windows Time service not running on the "
> + "guest");
> + } else {
> + if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
> + FORMAT_MESSAGE_FROM_SYSTEM |
> + FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
> + (DWORD)hr, MAKELANGID(LANG_NEUTRAL,
> + SUBLANG_DEFAULT), (LPTSTR) & msg_buffer, 0,
> + NULL)) {
> + error_setg(errp, "w32tm failed with error (0x%lx), couldn'"
> + "t retrieve error message", hr);
> + } else {
> + error_setg(errp, "w32tm failed with error (0x%lx): %s", hr,
> + (LPCTSTR)msg_buffer);
> + LocalFree(msg_buffer);
> + }
> + }
> + } else if (!InternetGetConnectedState(&ret_flags, 0)) {
> + error_setg(errp, "No internet connection on guest, sync not "
> + "accurate");
> + }
> return;
> }
>
> --
> 2.13.5
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-10-25 22:55 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-22 13:55 [Qemu-devel] [PATCH v2] qga-win: Updating guest_set_time action Bishara AbuHattoum
2017-08-22 13:56 ` Sameeh Jubran
2017-10-02 13:04 ` Bishara AbuHattoum
2017-10-25 22:55 ` Michael Roth
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).