1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * https://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.commons.net.ntp;
19
20 import java.net.DatagramPacket;
21
22 /**
23 * Interface for a NtpV3Packet with get/set methods corresponding to the fields in the NTP Data Message Header described in RFC 1305.
24 */
25 public interface NtpV3Packet {
26
27 /**
28 * Standard NTP UDP port
29 */
30 int NTP_PORT = 123;
31
32 /**
33 * {@value}
34 */
35 int LI_NO_WARNING = 0;
36
37 /**
38 * {@value}
39 */
40 int LI_LAST_MINUTE_HAS_61_SECONDS = 1;
41
42 /**
43 * {@value}
44 */
45 int LI_LAST_MINUTE_HAS_59_SECONDS = 2;
46
47 /**
48 * {@value}
49 */
50 int LI_ALARM_CONDITION = 3;
51
52 /** Mode option {@value}. */
53 int MODE_RESERVED = 0;
54
55 /** Mode option {@value}. */
56 int MODE_SYMMETRIC_ACTIVE = 1;
57
58 /** Mode option {@value}. */
59 int MODE_SYMMETRIC_PASSIVE = 2;
60
61 /** Mode option {@value}. */
62 int MODE_CLIENT = 3;
63
64 /** Mode option {@value}. */
65 int MODE_SERVER = 4;
66
67 /** Mode option {@value}. */
68 int MODE_BROADCAST = 5;
69
70 /** Mode option {@value}. */
71 int MODE_CONTROL_MESSAGE = 6;
72
73 /** Mode option {@value}. */
74 int MODE_PRIVATE = 7;
75
76 /**
77 * {@value}
78 */
79 int NTP_MINPOLL = 4; // 16 seconds
80
81 /**
82 * {@value}
83 */
84 int NTP_MAXPOLL = 14; // 16284 seconds
85
86 /**
87 * {@value}
88 */
89 int NTP_MINCLOCK = 1;
90
91 /**
92 * {@value}
93 */
94 int NTP_MAXCLOCK = 10;
95
96 /**
97 * {@value}
98 */
99 int VERSION_3 = 3;
100
101 /**
102 * {@value}
103 */
104 int VERSION_4 = 4;
105
106 //
107 // possible getType values such that other time-related protocols can have its information represented as NTP packets
108 //
109 /**
110 * {@value}
111 */
112 String TYPE_NTP = "NTP"; // RFC-1305/2030
113
114 /**
115 * {@value}
116 */
117 String TYPE_ICMP = "ICMP"; // RFC-792
118
119 /**
120 * {@value}
121 */
122 String TYPE_TIME = "TIME"; // RFC-868
123
124 /**
125 * {@value}
126 */
127 String TYPE_DAYTIME = "DAYTIME"; // RFC-867
128
129 /**
130 * Gets a datagram packet with the NTP parts already filled in.
131 *
132 * @return a datagram packet with the NTP parts already filled in.
133 */
134 DatagramPacket getDatagramPacket();
135
136 /**
137 * Gets the leap indicator as defined in RFC-1305.
138 *
139 * @return the leap indicator as defined in RFC-1305.
140 */
141 int getLeapIndicator();
142
143 /**
144 * Gets the mode as defined in RFC-1305.
145 *
146 * @return the mode as defined in RFC-1305.
147 */
148 int getMode();
149
150 /**
151 * Gets the mode as human readable string; for example, 3=Client.
152 *
153 * @return the mode as human readable string; for example, 3=Client.
154 */
155 String getModeName();
156
157 /**
158 * Gets the {@code originate} time as defined in RFC-1305.
159 *
160 * @return the {@code originate} time as defined in RFC-1305.
161 */
162 TimeStamp getOriginateTimeStamp();
163
164 /**
165 * Gets the poll interval as defined in RFC-1305. Field range between NTP_MINPOLL and NTP_MAXPOLL.
166 *
167 * @return the poll interval as defined in RFC-1305. Field range between NTP_MINPOLL and NTP_MAXPOLL.
168 */
169 int getPoll();
170
171 /**
172 * Gets the precision as defined in RFC-1305.
173 *
174 * @return the precision as defined in RFC-1305.
175 */
176 int getPrecision();
177
178 /**
179 * Gets the {@code receive} time as defined in RFC-1305.
180 *
181 * @return the {@code receive} time as defined in RFC-1305.
182 */
183 TimeStamp getReceiveTimeStamp();
184
185 /**
186 * Gets the reference id (32-bit code) as defined in RFC-1305.
187 *
188 * @return the reference id (32-bit code) as defined in RFC-1305.
189 */
190 int getReferenceId();
191
192 /**
193 * Gets the reference ID string.
194 *
195 * @return the reference ID string.
196 */
197 String getReferenceIdString();
198
199 /**
200 * Gets the reference time as defined in RFC-1305.
201 *
202 * @return the reference time as defined in RFC-1305.
203 */
204 TimeStamp getReferenceTimeStamp();
205
206 /**
207 * Gets the root delay as defined in RFC-1305.
208 *
209 * @return the root delay as defined in RFC-1305.
210 */
211 int getRootDelay();
212
213 /**
214 * Gets root delay in milliseconds.
215 *
216 * @return root delay in milliseconds.
217 */
218 double getRootDelayInMillisDouble();
219
220 /**
221 * Gets the root dispersion as defined in RFC-1305.
222 *
223 * @return the root dispersion as defined in RFC-1305.
224 */
225 int getRootDispersion();
226
227 /**
228 * Gets the the root dispersion in milliseconds.
229 *
230 * @return the root dispersion in milliseconds.
231 */
232 long getRootDispersionInMillis();
233
234 /**
235 * Gets the root dispersion in milliseconds.
236 *
237 * @return the root dispersion in milliseconds.
238 */
239 double getRootDispersionInMillisDouble();
240
241 /**
242 * Gets the stratum as defined in RFC-1305.
243 *
244 * @return the stratum as defined in RFC-1305.
245 */
246 int getStratum();
247
248 /**
249 * Gets the {@code transmit} timestamp as defined in RFC-1305.
250 *
251 * @return the {@code transmit} timestamp as defined in RFC-1305.
252 */
253 TimeStamp getTransmitTimeStamp();
254
255 /**
256 * Gets the type of time packet. The values (e.g. NTP, TIME, ICMP, ...) correspond to the protocol used to obtain the timing information.
257 *
258 * @return packet type string identifier
259 */
260 String getType();
261
262 /**
263 * Gets version as defined in RFC-1305.
264 *
265 * @return version as defined in RFC-1305.
266 */
267 int getVersion();
268
269 /**
270 * Sets the contents of this object from the datagram packet
271 *
272 * @param dp the packet
273 */
274 void setDatagramPacket(DatagramPacket dp);
275
276 /**
277 * Sets leap indicator.
278 *
279 * @param li leap indicator code
280 */
281 void setLeapIndicator(int li);
282
283 /**
284 * Sets mode as defined in RFC-1305
285 *
286 * @param mode the mode to set
287 */
288 void setMode(int mode);
289
290 /**
291 * Sets originate timestamp given NTP TimeStamp object.
292 *
293 * @param ts timestamp
294 */
295 void setOriginateTimeStamp(TimeStamp ts);
296
297 /**
298 * Sets poll interval as defined in RFC-1305. Field range between NTP_MINPOLL and NTP_MAXPOLL.
299 *
300 * @param poll the interval to set
301 */
302 void setPoll(int poll);
303
304 /**
305 * Sets precision as defined in RFC-1305
306 *
307 * @param precision Precision
308 * @since 3.4
309 */
310 void setPrecision(int precision);
311
312 /**
313 * Sets receive timestamp given NTP TimeStamp object.
314 *
315 * @param ts timestamp
316 */
317 void setReceiveTimeStamp(TimeStamp ts);
318
319 /**
320 * Sets reference clock identifier field.
321 *
322 * @param refId the clock id field to set
323 */
324 void setReferenceId(int refId);
325
326 /**
327 * Sets the reference timestamp given NTP TimeStamp object.
328 *
329 * @param ts timestamp
330 */
331 void setReferenceTime(TimeStamp ts);
332
333 /**
334 * Sets root delay as defined in RFC-1305
335 *
336 * @param delay the delay to set
337 * @since 3.4
338 */
339 void setRootDelay(int delay);
340
341 /**
342 * Sets the dispersion value.
343 *
344 * @param dispersion the value.
345 * @since 3.4
346 */
347 void setRootDispersion(int dispersion);
348
349 /**
350 * Sets stratum as defined in RFC-1305
351 *
352 * @param stratum the stratum to set
353 */
354 void setStratum(int stratum);
355
356 /**
357 * Sets the {@code transmit} timestamp given NTP TimeStamp object.
358 *
359 * @param ts timestamp
360 */
361 void setTransmitTime(TimeStamp ts);
362
363 /**
364 * Sets version as defined in RFC-1305
365 *
366 * @param version the version to set
367 */
368 void setVersion(int version);
369
370 }