diff options
Diffstat (limited to 'miscutils/adjtimex.c')
-rw-r--r-- | miscutils/adjtimex.c | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/miscutils/adjtimex.c b/miscutils/adjtimex.c new file mode 100644 index 000000000..b35538a84 --- /dev/null +++ b/miscutils/adjtimex.c | |||
@@ -0,0 +1,117 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
2 | /* | ||
3 | * adjtimex.c - read, and possibly modify, the Linux kernel `timex' variables. | ||
4 | * | ||
5 | * Originally written: October 1997 | ||
6 | * Last hack: March 2001 | ||
7 | * Copyright 1997, 2000, 2001 Larry Doolittle <LRDoolittle@lbl.gov> | ||
8 | * | ||
9 | * busyboxed 20 March 2001, Larry Doolittle <ldoolitt@recycle.lbl.gov> | ||
10 | * | ||
11 | * Licensed under GPLv2 or later, see file License in this tarball for details. | ||
12 | */ | ||
13 | |||
14 | #include "busybox.h" | ||
15 | #include <sys/timex.h> | ||
16 | |||
17 | static const struct {int bit; const char *name;} statlist[] = { | ||
18 | { STA_PLL, "PLL" }, | ||
19 | { STA_PPSFREQ, "PPSFREQ" }, | ||
20 | { STA_PPSTIME, "PPSTIME" }, | ||
21 | { STA_FLL, "FFL" }, | ||
22 | { STA_INS, "INS" }, | ||
23 | { STA_DEL, "DEL" }, | ||
24 | { STA_UNSYNC, "UNSYNC" }, | ||
25 | { STA_FREQHOLD, "FREQHOLD" }, | ||
26 | { STA_PPSSIGNAL, "PPSSIGNAL" }, | ||
27 | { STA_PPSJITTER, "PPSJITTER" }, | ||
28 | { STA_PPSWANDER, "PPSWANDER" }, | ||
29 | { STA_PPSERROR, "PPSERROR" }, | ||
30 | { STA_CLOCKERR, "CLOCKERR" }, | ||
31 | { 0, NULL } }; | ||
32 | |||
33 | static const char * const ret_code_descript[] = { | ||
34 | "clock synchronized", | ||
35 | "insert leap second", | ||
36 | "delete leap second", | ||
37 | "leap second in progress", | ||
38 | "leap second has occurred", | ||
39 | "clock not synchronized" }; | ||
40 | |||
41 | int adjtimex_main(int argc, char **argv) | ||
42 | { | ||
43 | enum { | ||
44 | OPT_quiet = 0x1 | ||
45 | }; | ||
46 | unsigned opt; | ||
47 | char *opt_o, *opt_f, *opt_p, *opt_t; | ||
48 | struct timex txc; | ||
49 | int i, ret, sep; | ||
50 | const char *descript; | ||
51 | txc.modes=0; | ||
52 | |||
53 | opt = getopt32(argc, argv, "qo:f:p:t:", | ||
54 | &opt_o, &opt_f, &opt_p, &opt_t); | ||
55 | //if (opt & 0x1) // -q | ||
56 | if (opt & 0x2) { // -o | ||
57 | txc.offset = xatoi(opt_o); | ||
58 | txc.modes |= ADJ_OFFSET_SINGLESHOT; | ||
59 | } | ||
60 | if (opt & 0x4) { // -f | ||
61 | txc.freq = xatou(opt_f); | ||
62 | txc.modes |= ADJ_FREQUENCY; | ||
63 | } | ||
64 | if (opt & 0x8) { // -p | ||
65 | txc.constant = xatoi(opt_p); | ||
66 | txc.modes |= ADJ_TIMECONST; | ||
67 | } | ||
68 | if (opt & 0x10) { // -t | ||
69 | txc.tick = xatoi(opt_t); | ||
70 | txc.modes |= ADJ_TICK; | ||
71 | } | ||
72 | if (argc != optind) { /* no valid non-option parameters */ | ||
73 | bb_show_usage(); | ||
74 | } | ||
75 | |||
76 | ret = adjtimex(&txc); | ||
77 | |||
78 | if (ret < 0) perror("adjtimex"); | ||
79 | |||
80 | if (!(opt & OPT_quiet) && ret>=0) { | ||
81 | printf( | ||
82 | " mode: %d\n" | ||
83 | "-o offset: %ld\n" | ||
84 | "-f frequency: %ld\n" | ||
85 | " maxerror: %ld\n" | ||
86 | " esterror: %ld\n" | ||
87 | " status: %d ( ", | ||
88 | txc.modes, txc.offset, txc.freq, txc.maxerror, | ||
89 | txc.esterror, txc.status); | ||
90 | |||
91 | /* representative output of next code fragment: | ||
92 | "PLL | PPSTIME" */ | ||
93 | sep=0; | ||
94 | for (i=0; statlist[i].name; i++) { | ||
95 | if (txc.status & statlist[i].bit) { | ||
96 | if (sep) fputs(" | ",stdout); | ||
97 | fputs(statlist[i].name,stdout); | ||
98 | sep=1; | ||
99 | } | ||
100 | } | ||
101 | |||
102 | descript = "error"; | ||
103 | if (ret >= 0 && ret <= 5) descript = ret_code_descript[ret]; | ||
104 | printf(" )\n" | ||
105 | "-p timeconstant: %ld\n" | ||
106 | " precision: %ld\n" | ||
107 | " tolerance: %ld\n" | ||
108 | "-t tick: %ld\n" | ||
109 | " time.tv_sec: %ld\n" | ||
110 | " time.tv_usec: %ld\n" | ||
111 | " return value: %d (%s)\n", | ||
112 | txc.constant, | ||
113 | txc.precision, txc.tolerance, txc.tick, | ||
114 | (long)txc.time.tv_sec, (long)txc.time.tv_usec, ret, descript); | ||
115 | } | ||
116 | return (ret<0); | ||
117 | } | ||