sntp-opts.def revision 1.1.1.6 1 1.1 kardel /* -*- Mode: Text -*- */
2 1.1 kardel
3 1.1 kardel autogen definitions options;
4 1.1 kardel
5 1.1 kardel #include autogen-version.def
6 1.1 kardel #include copyright.def
7 1.1 kardel
8 1.1 kardel prog-name = "sntp";
9 1.1.1.3 christos prog-title = "standard Simple Network Time Protocol client program";
10 1.1.1.2 kardel argument = '[ hostname-or-IP ...]';
11 1.1.1.2 kardel
12 1.1.1.2 kardel #include homerc.def
13 1.1 kardel
14 1.1 kardel long-opts;
15 1.1 kardel
16 1.1.1.3 christos config-header = "config.h";
17 1.1 kardel
18 1.1 kardel environrc;
19 1.1 kardel
20 1.1 kardel #include version.def
21 1.1 kardel
22 1.1 kardel flag = {
23 1.1.1.3 christos name = ipv4;
24 1.1.1.3 christos value = 4;
25 1.1.1.3 christos flags-cant = ipv6;
26 1.1.1.3 christos descrip = "Force IPv4 DNS name resolution";
27 1.1.1.3 christos doc = <<- _EndOfDoc_
28 1.1.1.2 kardel Force DNS resolution of the following host names on the command line
29 1.1 kardel to the IPv4 namespace.
30 1.1 kardel _EndOfDoc_;
31 1.1 kardel };
32 1.1 kardel
33 1.1 kardel flag = {
34 1.1.1.3 christos name = ipv6;
35 1.1.1.3 christos value = 6;
36 1.1.1.3 christos flags-cant = ipv4;
37 1.1.1.3 christos descrip = "Force IPv6 DNS name resolution";
38 1.1.1.3 christos doc = <<- _EndOfDoc_
39 1.1.1.2 kardel Force DNS resolution of the following host names on the command line
40 1.1 kardel to the IPv6 namespace.
41 1.1 kardel _EndOfDoc_;
42 1.1 kardel };
43 1.1 kardel
44 1.1.1.3 christos flag = {
45 1.1.1.3 christos name = authentication;
46 1.1.1.3 christos value = a;
47 1.1.1.3 christos descrip = "Enable authentication with the key @var{auth-keynumber}";
48 1.1.1.3 christos arg-type = number;
49 1.1.1.3 christos arg-name = "auth-keynumber";
50 1.1.1.3 christos doc = <<- _EndOfDoc_
51 1.1.1.3 christos Enable authentication using the key specified in this option's
52 1.1.1.3 christos argument. The argument of this option is the @option{keyid}, a
53 1.1.1.3 christos number specified in the @option{keyfile} as this key's identifier.
54 1.1.1.3 christos See the @option{keyfile} option (@option{-k}) for more details.
55 1.1.1.3 christos _EndOfDoc_;
56 1.1.1.3 christos };
57 1.1 kardel
58 1.1 kardel flag = {
59 1.1.1.3 christos name = broadcast;
60 1.1.1.3 christos value = b;
61 1.1.1.3 christos descrip = "Listen to the address specified for broadcast time sync";
62 1.1.1.3 christos arg-type = string;
63 1.1.1.3 christos arg-name = "broadcast-address";
64 1.1.1.3 christos max = NOLIMIT;
65 1.1.1.3 christos stack-arg;
66 1.1.1.3 christos doc = <<- _EndOfDoc_
67 1.1.1.3 christos If specified @code{sntp} will listen to the specified address
68 1.1.1.3 christos for NTP broadcasts. The default maximum wait time
69 1.1.1.3 christos can (and probably should) be modified with @option{-t}.
70 1.1 kardel _EndOfDoc_;
71 1.1 kardel };
72 1.1 kardel
73 1.1 kardel flag = {
74 1.1.1.3 christos name = concurrent;
75 1.1.1.3 christos value = c;
76 1.1.1.3 christos descrip = "Concurrently query all IPs returned for host-name";
77 1.1.1.3 christos arg-type = string;
78 1.1.1.3 christos arg-name = "host-name";
79 1.1.1.3 christos max = NOLIMIT;
80 1.1.1.3 christos stack-arg;
81 1.1.1.3 christos doc = <<- _EndOfDoc_
82 1.1.1.3 christos Requests from an NTP "client" to a "server" should never be sent
83 1.1.1.3 christos more rapidly than one every 2 seconds. By default, any IPs returned
84 1.1.1.3 christos as part of a DNS lookup are assumed to be for a single instance of
85 1.1.1.3 christos @code{ntpd}, and therefore @code{sntp} will send queries to these IPs
86 1.1.1.3 christos one after another, with a 2-second gap in between each query.
87 1.1.1.3 christos
88 1.1.1.3 christos The @option{-c} or @option{--concurrent} flag says that any IPs
89 1.1.1.3 christos returned for the DNS lookup of the supplied host-name are on
90 1.1.1.3 christos different machines, so we can send concurrent queries.
91 1.1 kardel _EndOfDoc_;
92 1.1 kardel };
93 1.1 kardel
94 1.1.1.3 christos #include debug-opt.def
95 1.1 kardel
96 1.1 kardel flag = {
97 1.1.1.3 christos name = gap;
98 1.1.1.3 christos value = g;
99 1.1.1.3 christos descrip = "The gap (in milliseconds) between time requests";
100 1.1.1.3 christos arg-type = number;
101 1.1.1.3 christos arg-name = "milliseconds";
102 1.1.1.3 christos arg-default = 50;
103 1.1.1.3 christos doc = <<- _EndOfDoc_
104 1.1.1.3 christos Since we're only going to use the first valid response we get and
105 1.1.1.3 christos there is benefit to specifying a good number of servers to query,
106 1.1.1.3 christos separate the queries we send out by the specified number of
107 1.1.1.3 christos milliseconds.
108 1.1 kardel _EndOfDoc_;
109 1.1.1.2 kardel };
110 1.1 kardel
111 1.1 kardel flag = {
112 1.1.1.3 christos name = kod;
113 1.1.1.3 christos value = K;
114 1.1.1.3 christos arg-type = file;
115 1.1.1.3 christos arg-name = "file-name";
116 1.1.1.3 christos arg-default = "/var/db/ntp-kod";
117 1.1.1.3 christos descrip = "KoD history filename";
118 1.1.1.3 christos doc = <<- _EndOfDoc_
119 1.1.1.3 christos Specifies the filename to be used for the persistent history of KoD
120 1.1.1.4 christos responses received from servers. If the file does not exist, a
121 1.1.1.4 christos warning message will be displayed. The file will not be created.
122 1.1 kardel _EndOfDoc_;
123 1.1 kardel };
124 1.1 kardel
125 1.1 kardel flag = {
126 1.1.1.3 christos name = keyfile;
127 1.1.1.3 christos value = k;
128 1.1.1.3 christos descrip = "Look in this file for the key specified with @option{-a}";
129 1.1.1.3 christos arg-type = file;
130 1.1.1.3 christos arg-name = "file-name";
131 1.1.1.6 christos arg-default = "/etc/ntp.keys";
132 1.1.1.3 christos doc = <<- _EndOfDoc_
133 1.1.1.3 christos This option specifies the keyfile.
134 1.1.1.3 christos @code{sntp} will search for the key specified with @option{-a}
135 1.1.1.3 christos @file{keyno} in this file. See @command{ntp.keys(5)} for more
136 1.1.1.3 christos information.
137 1.1 kardel _EndOfDoc_;
138 1.1 kardel };
139 1.1 kardel
140 1.1 kardel flag = {
141 1.1.1.3 christos name = logfile;
142 1.1.1.3 christos value = l;
143 1.1.1.3 christos arg-type = file;
144 1.1.1.3 christos arg-name = "file-name";
145 1.1.1.3 christos descrip = "Log to specified logfile";
146 1.1.1.3 christos doc = <<- _EndOfDoc_
147 1.1.1.3 christos This option causes the client to write log messages to the specified
148 1.1.1.3 christos @file{logfile}.
149 1.1 kardel _EndOfDoc_;
150 1.1 kardel };
151 1.1 kardel
152 1.1 kardel flag = {
153 1.1.1.3 christos name = steplimit;
154 1.1.1.3 christos value = M;
155 1.1.1.3 christos arg-type = number;
156 1.1.1.3 christos arg-range = "0->";
157 1.1.1.3 christos descrip = "Adjustments less than @var{steplimit} msec will be slewed";
158 1.1.1.3 christos doc = <<- _EndOfDoc_
159 1.1.1.3 christos If the time adjustment is less than @file{steplimit} milliseconds,
160 1.1.1.3 christos slew the amount using @command{adjtime(2)}. Otherwise, step the
161 1.1.1.5 christos correction using @command{settimeofday(2)}. The default value is 0,
162 1.1.1.5 christos which means all adjustments will be stepped. This is a feature, as
163 1.1.1.5 christos different situations demand different values.
164 1.1 kardel _EndOfDoc_;
165 1.1 kardel };
166 1.1 kardel
167 1.1 kardel flag = {
168 1.1.1.3 christos name = ntpversion;
169 1.1.1.3 christos value = o;
170 1.1.1.3 christos descrip = "Send @var{int} as our NTP protocol version";
171 1.1.1.3 christos arg-type = number;
172 1.1.1.3 christos arg-default = 4;
173 1.1.1.3 christos arg-range = "0->7";
174 1.1.1.3 christos doc = <<- _EndOfDoc_
175 1.1.1.3 christos When sending requests to a remote server, tell them we are running
176 1.1.1.3 christos NTP protocol version @file{ntpversion} .
177 1.1 kardel _EndOfDoc_;
178 1.1 kardel };
179 1.1 kardel
180 1.1 kardel flag = {
181 1.1.1.3 christos name = usereservedport;
182 1.1.1.3 christos value = r;
183 1.1.1.3 christos descrip = "Use the NTP Reserved Port (port 123)";
184 1.1.1.3 christos doc = <<- _EndOfDoc_
185 1.1.1.3 christos Use port 123, which is reserved for NTP, for our network
186 1.1.1.3 christos communications.
187 1.1 kardel _EndOfDoc_;
188 1.1 kardel };
189 1.1 kardel
190 1.1 kardel flag = {
191 1.1.1.3 christos name = step;
192 1.1.1.3 christos value = S;
193 1.1.1.3 christos descrip = "OK to 'step' the time with @command{settimeofday(2)}";
194 1.1.1.3 christos doc = <<- _EndOfDoc_
195 1.1.1.3 christos _EndOfDoc_;
196 1.1.1.3 christos };
197 1.1 kardel
198 1.1.1.3 christos flag = {
199 1.1.1.3 christos name = slew;
200 1.1.1.3 christos value = s;
201 1.1.1.3 christos descrip = "OK to 'slew' the time with @command{adjtime(2)}";
202 1.1.1.3 christos doc = <<- _EndOfDoc_
203 1.1.1.3 christos _EndOfDoc_;
204 1.1.1.3 christos };
205 1.1 kardel
206 1.1 kardel
207 1.1.1.3 christos flag = {
208 1.1.1.3 christos name = timeout;
209 1.1.1.3 christos value = t;
210 1.1.1.3 christos descrip = "The number of seconds to wait for responses";
211 1.1.1.3 christos arg-type = number;
212 1.1.1.3 christos arg-name = "seconds";
213 1.1.1.3 christos arg-default = 5;
214 1.1.1.3 christos doc = <<- _EndOfDoc_
215 1.1.1.3 christos When waiting for a reply, @code{sntp} will wait the number
216 1.1.1.3 christos of seconds specified before giving up. The default should be
217 1.1.1.3 christos more than enough for a unicast response. If @code{sntp} is
218 1.1.1.3 christos only waiting for a broadcast response a longer timeout is
219 1.1.1.3 christos likely needed.
220 1.1 kardel _EndOfDoc_;
221 1.1 kardel };
222 1.1 kardel
223 1.1.1.3 christos flag = {
224 1.1.1.3 christos name = "wait";
225 1.1.1.3 christos descrip = "Wait for pending replies (if not setting the time)";
226 1.1.1.3 christos disable = no;
227 1.1.1.3 christos enabled;
228 1.1.1.3 christos settable;
229 1.1.1.3 christos doc = <<- _EndOfDoc_
230 1.1.1.3 christos If we are not setting the time, wait for all pending responses.
231 1.1.1.3 christos _EndOfDoc_;
232 1.1.1.3 christos };
233 1.1 kardel
234 1.1.1.2 kardel /* explain: Additional information whenever the usage routine is invoked */
235 1.1.1.2 kardel explain = <<- _END_EXPLAIN
236 1.1.1.2 kardel _END_EXPLAIN;
237 1.1 kardel
238 1.1.1.3 christos doc-section = {
239 1.1.1.3 christos ds-type = 'DESCRIPTION';
240 1.1.1.3 christos ds-format = 'mdoc';
241 1.1.1.3 christos ds-text = <<- _END_PROG_MDOC_DESCRIP
242 1.1.1.3 christos .Nm
243 1.1.1.3 christos can be used as an SNTP client to query a NTP or SNTP server and either display
244 1.1 kardel the time or set the local system's time (given suitable privilege). It can be
245 1.1.1.3 christos run as an interactive command or from a
246 1.1.1.3 christos .Ic cron
247 1.1 kardel job.
248 1.1 kardel
249 1.1 kardel NTP (the Network Time Protocol) and SNTP (the Simple Network Time Protocol)
250 1.1.1.2 kardel are defined and described by RFC 5905.
251 1.1 kardel
252 1.1.1.3 christos .Pp
253 1.1 kardel The default is to write the estimated correct local date and time (i.e. not
254 1.1.1.3 christos UTC) to the standard output in a format like:
255 1.1.1.2 kardel
256 1.1.1.3 christos .Ic "'1996-10-15 20:17:25.123 (+0800) +4.567 +/- 0.089 [host] IP sN'"
257 1.1.1.2 kardel
258 1.1.1.2 kardel where the
259 1.1.1.3 christos .Ic "'(+0800)'"
260 1.1.1.3 christos means that to get to UTC from the reported local time one must
261 1.1.1.3 christos add 8 hours and 0 minutes,
262 1.1.1.3 christos the
263 1.1.1.3 christos .Ic "'+4.567'"
264 1.1.1.2 kardel indicates the local clock is 4.567 seconds behind the correct time
265 1.1.1.3 christos (so 4.567 seconds must be added to the local clock to get it to be correct).
266 1.1.1.3 christos Note that the number of decimals printed for this value will change
267 1.1.1.3 christos based on the reported precision of the server.
268 1.1.1.3 christos .Ic "'+/- 0.089'"
269 1.1.1.3 christos is the reported
270 1.1.1.3 christos .Em synchronization distance
271 1.1.1.3 christos (in seconds), which represents the maximum error due to all causes.
272 1.1.1.3 christos If the server does not report valid data needed to calculate the
273 1.1.1.3 christos synchronization distance, this will be reported as
274 1.1.1.3 christos .Ic "'+/- ?'" .
275 1.1.1.3 christos If the
276 1.1.1.3 christos .Em host
277 1.1.1.3 christos is different from the
278 1.1.1.3 christos .Em IP ,
279 1.1.1.3 christos both will be displayed.
280 1.1.1.3 christos Otherwise, only the
281 1.1.1.3 christos .Em IP
282 1.1.1.3 christos is displayed.
283 1.1.1.3 christos Finally, the
284 1.1.1.3 christos .Em stratum
285 1.1.1.5 christos of the host is reported
286 1.1.1.5 christos and the leap indicator is decoded and displayed.
287 1.1.1.3 christos _END_PROG_MDOC_DESCRIP;
288 1.1.1.3 christos };
289 1.1.1.3 christos
290 1.1.1.3 christos doc-section = {
291 1.1.1.3 christos ds-type = 'USAGE';
292 1.1.1.3 christos ds-format = 'mdoc';
293 1.1.1.3 christos ds-text = <<- _END_MDOC_USAGE
294 1.1.1.3 christos .Bl -tag -width indent
295 1.1.1.3 christos .It Li "sntp ntpserver.somewhere"
296 1.1.1.3 christos is the simplest use of this program
297 1.1.1.3 christos and can be run as an unprivileged command
298 1.1.1.3 christos to check the current time and error in the local clock.
299 1.1.1.5 christos .It Li "sntp -Ss -M 128 ntpserver.somewhere"
300 1.1.1.3 christos With suitable privilege,
301 1.1.1.3 christos run as a command
302 1.1.1.3 christos or from a
303 1.1.1.3 christos .Xr cron 8
304 1.1.1.3 christos job,
305 1.1.1.5 christos .Ic "sntp -Ss -M 128 ntpserver.somewhere"
306 1.1.1.5 christos will request the time from the server,
307 1.1.1.5 christos and if that server reports that it is synchronized
308 1.1.1.5 christos then if the offset adjustment is less than 128 milliseconds
309 1.1.1.5 christos the correction will be slewed,
310 1.1.1.5 christos and if the correction is more than 128 milliseconds
311 1.1.1.5 christos the correction will be stepped.
312 1.1.1.5 christos .It Li "sntp -S ntpserver.somewhere"
313 1.1.1.5 christos With suitable privilege,
314 1.1.1.5 christos run as a command
315 1.1.1.5 christos or from a
316 1.1.1.5 christos .Xr cron 8
317 1.1.1.5 christos job,
318 1.1.1.5 christos .Ic "sntp -S ntpserver.somewhere"
319 1.1.1.5 christos will set (step) the local clock from a synchronized specified server,
320 1.1.1.3 christos like the (deprecated)
321 1.1.1.3 christos .Xr ntpdate 1ntpdatemdoc ,
322 1.1.1.3 christos or
323 1.1.1.3 christos .Xr rdate 8
324 1.1.1.3 christos commands.
325 1.1.1.3 christos .El
326 1.1.1.3 christos _END_MDOC_USAGE;
327 1.1.1.3 christos };
328 1.1.1.3 christos
329 1.1.1.3 christos doc-section = {
330 1.1.1.3 christos ds-type = 'AUTHORS';
331 1.1.1.3 christos ds-format = 'mdoc';
332 1.1.1.3 christos ds-text = <<- _END_MDOC_AUTHORS
333 1.1.1.3 christos .An "Johannes Maximilian Kuehn"
334 1.1.1.3 christos .An "Harlan Stenn"
335 1.1.1.3 christos .An "Dave Hart"
336 1.1.1.3 christos _END_MDOC_AUTHORS;
337 1.1.1.3 christos };
338