VirtualBox

source: vbox/trunk/src/VBox/Additions/linux/testcase/TimesyncBackdoor.c@ 76690

Last change on this file since 76690 was 76553, checked in by vboxsync, 6 years ago

scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.2 KB
Line 
1/** @file
2 *
3 * VirtualBox Timesync using temporary Backdoor
4 */
5
6/*
7 * Copyright (C) 2006-2019 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#include <unistd.h>
19#include <asm/io.h>
20#include <sys/time.h>
21#include <time.h>
22
23void usage()
24{
25 printf("TimesyncBackdoor [-interval <seconds>]"
26 " [-daemonize]"
27 "\n");
28}
29
30int main(int argc, char *argv[])
31{
32 int secInterval = 10;
33 int fDaemonize = 0;
34 int i;
35
36 for (i = 1; i < argc; i++)
37 {
38 if (strcmp(argv[i], "-interval") == 0)
39 {
40 if (argc <= i)
41 {
42 usage();
43 return 1;
44 }
45 secInterval = atoi(argv[i + 1]);
46 i++;
47 }
48 else if (strcmp(argv[i], "-daemonize") == 0)
49 {
50 fDaemonize = 1;
51 }
52 else
53 {
54 usage();
55 return 1;
56 }
57 }
58
59 /* get port IO permission */
60 if (iopl(3))
61 {
62 printf("Error: could not set IOPL to 3!\n");
63 return 1;
64 }
65
66 printf("VirtualBox timesync tool. Sync interval: %d seconds.\n", secInterval);
67
68 if (fDaemonize)
69 daemon(1, 0);
70
71 do
72 {
73 unsigned long long time;
74 /* get the high 32bit, this _must_ be done first */
75 outl(0, 0x505);
76 time = (unsigned long long)inl(0x505) << 32;
77 /* get the low 32bit */
78 outl(1, 0x505);
79 time |= inl(0x505);
80
81 /* set the system time */
82 struct timeval tv;
83 tv.tv_sec = time / (unsigned long long)1000;
84 tv.tv_usec = (time % (unsigned long long)1000) * 1000;
85 settimeofday(&tv, NULL);
86
87 /* wait for the next run */
88 sleep(secInterval);
89
90 } while (1);
91
92 return 0;
93}
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette