2 chronyd/chronyc - Programs for keeping computer clocks accurate.
4 **********************************************************************
5 * Copyright (C) Richard P. Curnow 1997-2003
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of version 2 of the GNU General Public License as
9 * published by the Free Software Foundation.
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 **********************************************************************
22 =======================================================================
24 Definitions for the network protocol used for command and monitoring
33 #include "addressing.h"
35 /* This is the default port to use for CANDM, if no alternative is
37 #define DEFAULT_CANDM_PORT 323
44 #define REQ_MODIFY_MINPOLL 4
45 #define REQ_MODIFY_MAXPOLL 5
47 #define REQ_MODIFY_MAXDELAY 7
48 #define REQ_MODIFY_MAXDELAYRATIO 8
49 #define REQ_MODIFY_MAXUPDATESKEW 9
51 #define REQ_SETTIME 11
54 #define REQ_N_SOURCES 14
55 #define REQ_SOURCE_DATA 15
58 #define REQ_ALLOWALL 18
60 #define REQ_DENYALL 20
61 #define REQ_CMDALLOW 21
62 #define REQ_CMDALLOWALL 22
63 #define REQ_CMDDENY 23
64 #define REQ_CMDDENYALL 24
65 #define REQ_ACCHECK 25
66 #define REQ_CMDACCHECK 26
67 #define REQ_ADD_SERVER 27
68 #define REQ_ADD_PEER 28
69 #define REQ_DEL_SOURCE 29
70 #define REQ_WRITERTC 30
72 #define REQ_DOFFSET 32
73 #define REQ_TRACKING 33
74 #define REQ_SOURCESTATS 34
75 #define REQ_RTCREPORT 35
76 #define REQ_TRIMRTC 36
77 #define REQ_CYCLELOGS 37
78 #define REQ_SUBNETS_ACCESSED 38
79 #define REQ_CLIENT_ACCESSES 39
80 #define REQ_CLIENT_ACCESSES_BY_INDEX 40
81 #define REQ_MANUAL_LIST 41
82 #define REQ_MANUAL_DELETE 42
83 #define REQ_MAKESTEP 43
84 #define REQ_ACTIVITY 44
85 #define REQ_MODIFY_MINSTRATUM 45
86 #define REQ_MODIFY_POLLTARGET 46
87 #define REQ_MODIFY_MAXDELAYDEVRATIO 47
88 #define REQ_RESELECT 48
89 #define REQ_RESELECTDISTANCE 49
90 #define REQ_MODIFY_MAKESTEP 50
91 #define REQ_SMOOTHING 51
92 #define REQ_SMOOTHTIME 52
93 #define REQ_REFRESH 53
94 #define N_REQUEST_TYPES 54
96 /* Special utoken value used to log on with first exchange being the
97 password. (This time value has long since gone by) */
98 #define SPECIAL_UTOKEN 0x10101010
100 /* Structure used to exchange timevals independent on size of time_t */
102 uint32_t tv_sec_high
;
107 /* This is used in tv_sec_high for 32-bit timestamps */
108 #define TV_NOHIGHSEC 0x7fffffff
110 /* 32-bit floating-point format consisting of 7-bit signed exponent
111 and 25-bit signed coefficient without hidden bit.
112 The result is calculated as: 2^(exp - 25) * coef */
117 /* The EOR (end of record) fields are used by the offsetof operator in
118 pktlength.c, to get the number of bytes that ought to be
119 transmitted for each packet type. */
140 int32_t n_good_samples
;
141 int32_t n_total_samples
;
149 } REQ_Modify_Minpoll
;
155 } REQ_Modify_Maxpoll
;
166 } REQ_Modify_Maxdelay
;
170 Float new_max_delay_ratio
;
172 } REQ_Modify_Maxdelayratio
;
176 Float new_max_delay_dev_ratio
;
178 } REQ_Modify_Maxdelaydevratio
;
182 int32_t new_min_stratum
;
184 } REQ_Modify_Minstratum
;
188 int32_t new_poll_target
;
190 } REQ_Modify_Polltarget
;
193 Float new_max_update_skew
;
195 } REQ_Modify_Maxupdateskew
;
201 } REQ_Modify_Makestep
;
240 /* Flags used in NTP source requests */
241 #define REQ_ADDSRC_ONLINE 0x1
242 #define REQ_ADDSRC_AUTOOFFLINE 0x2
243 #define REQ_ADDSRC_IBURST 0x4
244 #define REQ_ADDSRC_PREFER 0x8
245 #define REQ_ADDSRC_NOSELECT 0x10
246 #define REQ_ADDSRC_TRUST 0x20
247 #define REQ_ADDSRC_REQUIRE 0x40
254 int32_t presend_minpoll
;
257 Float max_delay_ratio
;
283 /* This is based on the response size rather than the
285 #define MAX_CLIENT_ACCESSES 8
288 uint32_t first_index
;
291 } REQ_ClientAccessesByIndex
;
301 } REQ_ReselectDistance
;
303 #define REQ_SMOOTHTIME_RESET 0
304 #define REQ_SMOOTHTIME_ACTIVATE 1
311 /* ================================================== */
313 #define PKT_TYPE_CMD_REQUEST 1
314 #define PKT_TYPE_CMD_REPLY 2
316 /* This version number needs to be incremented whenever the packet
317 size and/or the format of any of the existing messages is changed.
318 Other changes, e.g. new command types, should be handled cleanly by
319 client.c and cmdmon.c anyway, so the version can stay the same.
321 Version 1 : original version with fixed size packets
323 Version 2 : both command and reply packet sizes made capable of
324 being variable length.
326 Version 3 : NTP_Source message lengthened (auto_offline)
328 Version 4 : IPv6 addressing added, 64-bit time values, sourcestats
329 and tracking reports extended, added flags to NTP source request,
330 trimmed source report, replaced fixed-point format with floating-point
331 and used also instead of integer microseconds, new commands: modify stratum,
332 modify polltarget, modify maxdelaydevratio, reselect, reselectdistance
334 Version 5 : auth data moved to the end of the packet to allow hashes with
335 different sizes, extended sources, tracking and activity reports, dropped
336 subnets accessed and client accesses
338 Version 6 : added padding to requests to prevent amplification attack,
339 changed maximum number of samples in manual list to 16, new commands: modify
340 makestep, smoothing report, smoothtime command
342 Authentication was removed later in version 6.
345 #define PROTO_VERSION_NUMBER 6
347 /* The oldest protocol versions that are compatible enough with the current
348 version to report a version mismatch for the server and the client */
349 #define PROTO_VERSION_MISMATCH_COMPAT_SERVER 5
350 #define PROTO_VERSION_MISMATCH_COMPAT_CLIENT 4
352 /* The first protocol version using padding in requests */
353 #define PROTO_VERSION_PADDING 6
355 /* The maximum length of padding in request packet, currently
356 defined by MANUAL_LIST */
357 #define MAX_PADDING_LENGTH 396
359 /* ================================================== */
362 uint8_t version
; /* Protocol version */
363 uint8_t pkt_type
; /* What sort of packet this is */
366 uint16_t command
; /* Which command is being issued */
367 uint16_t attempt
; /* How many resends the client has done
368 (count up from zero for same sequence
370 uint32_t sequence
; /* Client's sequence number */
379 REQ_Modify_Minpoll modify_minpoll
;
380 REQ_Modify_Maxpoll modify_maxpoll
;
382 REQ_Modify_Maxdelay modify_maxdelay
;
383 REQ_Modify_Maxdelayratio modify_maxdelayratio
;
384 REQ_Modify_Maxdelaydevratio modify_maxdelaydevratio
;
385 REQ_Modify_Minstratum modify_minstratum
;
386 REQ_Modify_Polltarget modify_polltarget
;
387 REQ_Modify_Maxupdateskew modify_maxupdateskew
;
388 REQ_Modify_Makestep modify_makestep
;
393 REQ_Source_Data source_data
;
394 REQ_Allow_Deny allow_deny
;
395 REQ_Ac_Check ac_check
;
396 REQ_NTP_Source ntp_source
;
397 REQ_Del_Source del_source
;
400 REQ_Sourcestats sourcestats
;
401 REQ_ClientAccessesByIndex client_accesses_by_index
;
402 REQ_ManualDelete manual_delete
;
403 REQ_ReselectDistance reselect_distance
;
404 REQ_SmoothTime smoothtime
;
405 } data
; /* Command specific parameters */
407 /* Padding used to prevent traffic amplification. It only defines the
408 maximum size of the packet, there is no hole after the data field. */
409 uint8_t padding
[MAX_PADDING_LENGTH
];
413 /* ================================================== */
414 /* Authority codes for command types */
416 #define PERMIT_OPEN 0
417 #define PERMIT_LOCAL 1
418 #define PERMIT_AUTH 2
420 /* ================================================== */
424 #define RPY_N_SOURCES 2
425 #define RPY_SOURCE_DATA 3
426 #define RPY_MANUAL_TIMESTAMP 4
427 #define RPY_TRACKING 5
428 #define RPY_SOURCESTATS 6
430 #define RPY_SUBNETS_ACCESSED 8
431 #define RPY_CLIENT_ACCESSES 9
432 #define RPY_CLIENT_ACCESSES_BY_INDEX 10
433 #define RPY_MANUAL_LIST 11
434 #define RPY_ACTIVITY 12
435 #define RPY_SMOOTHING 13
436 #define N_REPLY_TYPES 14
439 #define STT_SUCCESS 0
442 #define STT_INVALID 3
443 #define STT_NOSUCHSOURCE 4
444 #define STT_INVALIDTS 5
445 #define STT_NOTENABLED 6
446 #define STT_BADSUBNET 7
447 #define STT_ACCESSALLOWED 8
448 #define STT_ACCESSDENIED 9
450 #define STT_NOHOSTACCESS 10
451 #define STT_SOURCEALREADYKNOWN 11
452 #define STT_TOOMANYSOURCES 12
454 #define STT_BADRTCFILE 14
455 #define STT_INACTIVE 15
456 #define STT_BADSAMPLE 16
457 #define STT_INVALIDAF 17
458 #define STT_BADPKTVERSION 18
459 #define STT_BADPKTLENGTH 19
470 #define RPY_SD_MD_CLIENT 0
471 #define RPY_SD_MD_PEER 1
472 #define RPY_SD_MD_REF 2
474 #define RPY_SD_ST_SYNC 0
475 #define RPY_SD_ST_UNREACH 1
476 #define RPY_SD_ST_FALSETICKER 2
477 #define RPY_SD_ST_JITTERY 3
478 #define RPY_SD_ST_CANDIDATE 4
479 #define RPY_SD_ST_OUTLIER 5
481 #define RPY_SD_FLAG_NOSELECT 0x1
482 #define RPY_SD_FLAG_PREFER 0x2
483 #define RPY_SD_FLAG_TRUST 0x4
484 #define RPY_SD_FLAG_REQUIRE 0x8
493 uint16_t reachability
;
494 uint32_t since_sample
;
495 Float orig_latest_meas
;
497 Float latest_meas_err
;
505 uint16_t leap_status
;
507 Float current_correction
;
511 Float resid_freq_ppm
;
514 Float root_dispersion
;
515 Float last_update_interval
;
524 uint32_t span_seconds
;
526 Float resid_freq_ppm
;
529 Float est_offset_err
;
537 uint32_t span_seconds
;
538 Float rtc_seconds_fast
;
539 Float rtc_gain_rate_ppm
;
544 uint32_t centiseconds
;
548 } RPY_ManualTimestamp
;
558 int8_t ntp_timeout_interval
;
560 uint32_t last_ntp_hit_ago
;
561 uint32_t last_cmd_hit_ago
;
562 } RPY_ClientAccesses_Client
;
565 uint32_t n_indices
; /* how many indices there are in the server's table */
566 uint32_t next_index
; /* the index 1 beyond those processed on this call */
567 uint32_t n_clients
; /* the number of valid entries in the following array */
568 RPY_ClientAccesses_Client clients
[MAX_CLIENT_ACCESSES
];
570 } RPY_ClientAccessesByIndex
;
572 #define MAX_MANUAL_LIST_SAMPLES 16
579 } RPY_ManualListSample
;
583 RPY_ManualListSample samples
[MAX_MANUAL_LIST_SAMPLES
];
590 int32_t burst_online
;
591 int32_t burst_offline
;
596 #define RPY_SMT_FLAG_ACTIVE 0x1
597 #define RPY_SMT_FLAG_LEAPONLY 0x2
604 Float last_update_ago
;
605 Float remaining_time
;
614 uint16_t command
; /* Which command is being replied to */
615 uint16_t reply
; /* Which format of reply this is */
616 uint16_t status
; /* Status of command processing */
617 uint16_t pad1
; /* Padding for compatibility and 4 byte alignment */
620 uint32_t sequence
; /* Echo of client's sequence number */
626 RPY_N_Sources n_sources
;
627 RPY_Source_Data source_data
;
628 RPY_ManualTimestamp manual_timestamp
;
629 RPY_Tracking tracking
;
630 RPY_Sourcestats sourcestats
;
632 RPY_ClientAccessesByIndex client_accesses_by_index
;
633 RPY_ManualList manual_list
;
634 RPY_Activity activity
;
635 RPY_Smoothing smoothing
;
636 } data
; /* Reply specific parameters */
640 /* ================================================== */
642 #endif /* GOT_CANDM_H */