]> git.ipfire.org Git - thirdparty/chrony.git/blob - candm.h
ntp: add copy option
[thirdparty/chrony.git] / candm.h
1 /*
2 chronyd/chronyc - Programs for keeping computer clocks accurate.
3
4 **********************************************************************
5 * Copyright (C) Richard P. Curnow 1997-2003
6 *
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.
10 *
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.
15 *
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.
19 *
20 **********************************************************************
21
22 =======================================================================
23
24 Definitions for the network protocol used for command and monitoring
25 of the timeserver.
26
27 */
28
29 #ifndef GOT_CANDM_H
30 #define GOT_CANDM_H
31
32 #include "sysincl.h"
33 #include "addressing.h"
34
35 /* This is the default port to use for CANDM, if no alternative is
36 defined */
37 #define DEFAULT_CANDM_PORT 323
38
39 /* Request codes */
40 #define REQ_NULL 0
41 #define REQ_ONLINE 1
42 #define REQ_OFFLINE 2
43 #define REQ_BURST 3
44 #define REQ_MODIFY_MINPOLL 4
45 #define REQ_MODIFY_MAXPOLL 5
46 #define REQ_DUMP 6
47 #define REQ_MODIFY_MAXDELAY 7
48 #define REQ_MODIFY_MAXDELAYRATIO 8
49 #define REQ_MODIFY_MAXUPDATESKEW 9
50 #define REQ_LOGON 10
51 #define REQ_SETTIME 11
52 #define REQ_LOCAL 12
53 #define REQ_MANUAL 13
54 #define REQ_N_SOURCES 14
55 #define REQ_SOURCE_DATA 15
56 #define REQ_REKEY 16
57 #define REQ_ALLOW 17
58 #define REQ_ALLOWALL 18
59 #define REQ_DENY 19
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
71 #define REQ_DFREQ 31
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 REQ_SERVER_STATS 54
95 #define REQ_CLIENT_ACCESSES_BY_INDEX2 55
96 #define REQ_LOCAL2 56
97 #define REQ_NTP_DATA 57
98 #define REQ_ADD_SERVER2 58
99 #define REQ_ADD_PEER2 59
100 #define REQ_ADD_SERVER3 60
101 #define REQ_ADD_PEER3 61
102 #define REQ_SHUTDOWN 62
103 #define REQ_ONOFFLINE 63
104 #define REQ_ADD_SOURCE 64
105 #define REQ_NTP_SOURCE_NAME 65
106 #define REQ_RESET_SOURCES 66
107 #define REQ_AUTH_DATA 67
108 #define REQ_CLIENT_ACCESSES_BY_INDEX3 68
109 #define REQ_SELECT_DATA 69
110 #define REQ_RELOAD_SOURCES 70
111 #define REQ_DOFFSET2 71
112 #define N_REQUEST_TYPES 72
113
114 /* Structure used to exchange timespecs independent of time_t size */
115 typedef struct {
116 uint32_t tv_sec_high;
117 uint32_t tv_sec_low;
118 uint32_t tv_nsec;
119 } Timespec;
120
121 /* This is used in tv_sec_high for 32-bit timestamps */
122 #define TV_NOHIGHSEC 0x7fffffff
123
124 /* 32-bit floating-point format consisting of 7-bit signed exponent
125 and 25-bit signed coefficient without hidden bit.
126 The result is calculated as: 2^(exp - 25) * coef */
127 typedef struct {
128 int32_t f;
129 } Float;
130
131 /* The EOR (end of record) fields are used by the offsetof operator in
132 pktlength.c, to get the number of bytes that ought to be
133 transmitted for each packet type. */
134
135 typedef struct {
136 int32_t EOR;
137 } REQ_Null;
138
139 typedef struct {
140 IPAddr mask;
141 IPAddr address;
142 int32_t EOR;
143 } REQ_Online;
144
145 typedef struct {
146 IPAddr mask;
147 IPAddr address;
148 int32_t EOR;
149 } REQ_Offline;
150
151 typedef struct {
152 IPAddr mask;
153 IPAddr address;
154 int32_t n_good_samples;
155 int32_t n_total_samples;
156 int32_t EOR;
157 } REQ_Burst;
158
159 typedef struct {
160 IPAddr address;
161 int32_t new_minpoll;
162 int32_t EOR;
163 } REQ_Modify_Minpoll;
164
165 typedef struct {
166 IPAddr address;
167 int32_t new_maxpoll;
168 int32_t EOR;
169 } REQ_Modify_Maxpoll;
170
171 typedef struct {
172 int32_t pad;
173 int32_t EOR;
174 } REQ_Dump;
175
176 typedef struct {
177 IPAddr address;
178 Float new_max_delay;
179 int32_t EOR;
180 } REQ_Modify_Maxdelay;
181
182 typedef struct {
183 IPAddr address;
184 Float new_max_delay_ratio;
185 int32_t EOR;
186 } REQ_Modify_Maxdelayratio;
187
188 typedef struct {
189 IPAddr address;
190 Float new_max_delay_dev_ratio;
191 int32_t EOR;
192 } REQ_Modify_Maxdelaydevratio;
193
194 typedef struct {
195 IPAddr address;
196 int32_t new_min_stratum;
197 int32_t EOR;
198 } REQ_Modify_Minstratum;
199
200 typedef struct {
201 IPAddr address;
202 int32_t new_poll_target;
203 int32_t EOR;
204 } REQ_Modify_Polltarget;
205
206 typedef struct {
207 Float new_max_update_skew;
208 int32_t EOR;
209 } REQ_Modify_Maxupdateskew;
210
211 typedef struct {
212 int32_t limit;
213 Float threshold;
214 int32_t EOR;
215 } REQ_Modify_Makestep;
216
217 typedef struct {
218 Timespec ts;
219 int32_t EOR;
220 } REQ_Logon;
221
222 typedef struct {
223 Timespec ts;
224 int32_t EOR;
225 } REQ_Settime;
226
227 typedef struct {
228 int32_t on_off;
229 int32_t stratum;
230 Float distance;
231 int32_t orphan;
232 int32_t EOR;
233 } REQ_Local;
234
235 typedef struct {
236 int32_t option;
237 int32_t EOR;
238 } REQ_Manual;
239
240 typedef struct {
241 int32_t index;
242 int32_t EOR;
243 } REQ_Source_Data;
244
245 typedef struct {
246 IPAddr ip;
247 int32_t subnet_bits;
248 int32_t EOR;
249 } REQ_Allow_Deny;
250
251 typedef struct {
252 IPAddr ip;
253 int32_t EOR;
254 } REQ_Ac_Check;
255
256 /* Source types in NTP source requests */
257 #define REQ_ADDSRC_SERVER 1
258 #define REQ_ADDSRC_PEER 2
259 #define REQ_ADDSRC_POOL 3
260
261 /* Flags used in NTP source requests */
262 #define REQ_ADDSRC_ONLINE 0x1
263 #define REQ_ADDSRC_AUTOOFFLINE 0x2
264 #define REQ_ADDSRC_IBURST 0x4
265 #define REQ_ADDSRC_PREFER 0x8
266 #define REQ_ADDSRC_NOSELECT 0x10
267 #define REQ_ADDSRC_TRUST 0x20
268 #define REQ_ADDSRC_REQUIRE 0x40
269 #define REQ_ADDSRC_INTERLEAVED 0x80
270 #define REQ_ADDSRC_BURST 0x100
271 #define REQ_ADDSRC_NTS 0x200
272 #define REQ_ADDSRC_COPY 0x400
273
274 typedef struct {
275 uint32_t type;
276 uint8_t name[256];
277 uint32_t port;
278 int32_t minpoll;
279 int32_t maxpoll;
280 int32_t presend_minpoll;
281 uint32_t min_stratum;
282 uint32_t poll_target;
283 uint32_t version;
284 uint32_t max_sources;
285 int32_t min_samples;
286 int32_t max_samples;
287 uint32_t authkey;
288 uint32_t nts_port;
289 Float max_delay;
290 Float max_delay_ratio;
291 Float max_delay_dev_ratio;
292 Float min_delay;
293 Float asymmetry;
294 Float offset;
295 uint32_t flags;
296 int32_t filter_length;
297 uint32_t cert_set;
298 uint32_t reserved[2];
299 int32_t EOR;
300 } REQ_NTP_Source;
301
302 typedef struct {
303 IPAddr ip_addr;
304 int32_t EOR;
305 } REQ_Del_Source;
306
307 typedef struct {
308 Float dfreq;
309 int32_t EOR;
310 } REQ_Dfreq;
311
312 typedef struct {
313 Float doffset;
314 int32_t EOR;
315 } REQ_Doffset;
316
317 typedef struct {
318 uint32_t index;
319 int32_t EOR;
320 } REQ_Sourcestats;
321
322 /* This is based on the response size rather than the
323 request size */
324 #define MAX_CLIENT_ACCESSES 8
325
326 typedef struct {
327 uint32_t first_index;
328 uint32_t n_clients;
329 uint32_t min_hits;
330 uint32_t reset;
331 int32_t EOR;
332 } REQ_ClientAccessesByIndex;
333
334 typedef struct {
335 int32_t index;
336 int32_t EOR;
337 } REQ_ManualDelete;
338
339 typedef struct {
340 Float distance;
341 int32_t EOR;
342 } REQ_ReselectDistance;
343
344 #define REQ_SMOOTHTIME_RESET 0
345 #define REQ_SMOOTHTIME_ACTIVATE 1
346
347 typedef struct {
348 int32_t option;
349 int32_t EOR;
350 } REQ_SmoothTime;
351
352 typedef struct {
353 IPAddr ip_addr;
354 int32_t EOR;
355 } REQ_NTPData;
356
357 typedef struct {
358 IPAddr ip_addr;
359 int32_t EOR;
360 } REQ_NTPSourceName;
361
362 typedef struct {
363 IPAddr ip_addr;
364 int32_t EOR;
365 } REQ_AuthData;
366
367 typedef struct {
368 uint32_t index;
369 int32_t EOR;
370 } REQ_SelectData;
371
372 /* ================================================== */
373
374 #define PKT_TYPE_CMD_REQUEST 1
375 #define PKT_TYPE_CMD_REPLY 2
376
377 /* This version number needs to be incremented whenever the packet
378 size and/or the format of any of the existing messages is changed.
379 Other changes, e.g. new command types, should be handled cleanly by
380 client.c and cmdmon.c anyway, so the version can stay the same.
381
382 Version 1 : original version with fixed size packets
383
384 Version 2 : both command and reply packet sizes made capable of
385 being variable length.
386
387 Version 3 : NTP_Source message lengthened (auto_offline)
388
389 Version 4 : IPv6 addressing added, 64-bit time values, sourcestats
390 and tracking reports extended, added flags to NTP source request,
391 trimmed source report, replaced fixed-point format with floating-point
392 and used also instead of integer microseconds, new commands: modify stratum,
393 modify polltarget, modify maxdelaydevratio, reselect, reselectdistance
394
395 Version 5 : auth data moved to the end of the packet to allow hashes with
396 different sizes, extended sources, tracking and activity reports, dropped
397 subnets accessed and client accesses
398
399 Version 6 : added padding to requests to prevent amplification attack,
400 changed maximum number of samples in manual list to 16, new commands: modify
401 makestep, smoothing, smoothtime
402
403 Support for authentication was removed later in version 6 of the protocol
404 and commands that required authentication are allowed only locally over Unix
405 domain socket.
406
407 Version 6 (no authentication) : changed format of client accesses by index
408 (two times), delta offset, and manual timestamp, added new fields and
409 flags to NTP source request and report, made length of manual list constant,
410 added new commands: authdata, ntpdata, onoffline, refresh, reset,
411 selectdata, serverstats, shutdown, sourcename
412 */
413
414 #define PROTO_VERSION_NUMBER 6
415
416 /* The oldest protocol versions that are compatible enough with the current
417 version to report a version mismatch for the server and the client */
418 #define PROTO_VERSION_MISMATCH_COMPAT_SERVER 5
419 #define PROTO_VERSION_MISMATCH_COMPAT_CLIENT 4
420
421 /* The first protocol version using padding in requests */
422 #define PROTO_VERSION_PADDING 6
423
424 /* The maximum length of padding in request packet, currently
425 defined by CLIENT_ACCESSES_BY_INDEX3 */
426 #define MAX_PADDING_LENGTH 484
427
428 /* ================================================== */
429
430 typedef struct {
431 uint8_t version; /* Protocol version */
432 uint8_t pkt_type; /* What sort of packet this is */
433 uint8_t res1;
434 uint8_t res2;
435 uint16_t command; /* Which command is being issued */
436 uint16_t attempt; /* How many resends the client has done
437 (count up from zero for same sequence
438 number) */
439 uint32_t sequence; /* Client's sequence number */
440 uint32_t pad1;
441 uint32_t pad2;
442
443 union {
444 REQ_Null null;
445 REQ_Online online;
446 REQ_Offline offline;
447 REQ_Burst burst;
448 REQ_Modify_Minpoll modify_minpoll;
449 REQ_Modify_Maxpoll modify_maxpoll;
450 REQ_Dump dump;
451 REQ_Modify_Maxdelay modify_maxdelay;
452 REQ_Modify_Maxdelayratio modify_maxdelayratio;
453 REQ_Modify_Maxdelaydevratio modify_maxdelaydevratio;
454 REQ_Modify_Minstratum modify_minstratum;
455 REQ_Modify_Polltarget modify_polltarget;
456 REQ_Modify_Maxupdateskew modify_maxupdateskew;
457 REQ_Modify_Makestep modify_makestep;
458 REQ_Logon logon;
459 REQ_Settime settime;
460 REQ_Local local;
461 REQ_Manual manual;
462 REQ_Source_Data source_data;
463 REQ_Allow_Deny allow_deny;
464 REQ_Ac_Check ac_check;
465 REQ_NTP_Source ntp_source;
466 REQ_Del_Source del_source;
467 REQ_Dfreq dfreq;
468 REQ_Doffset doffset;
469 REQ_Sourcestats sourcestats;
470 REQ_ClientAccessesByIndex client_accesses_by_index;
471 REQ_ManualDelete manual_delete;
472 REQ_ReselectDistance reselect_distance;
473 REQ_SmoothTime smoothtime;
474 REQ_NTPData ntp_data;
475 REQ_NTPSourceName ntp_source_name;
476 REQ_AuthData auth_data;
477 REQ_SelectData select_data;
478 } data; /* Command specific parameters */
479
480 /* Padding used to prevent traffic amplification. It only defines the
481 maximum size of the packet, there is no hole after the data field. */
482 uint8_t padding[MAX_PADDING_LENGTH];
483
484 } CMD_Request;
485
486 /* ================================================== */
487 /* Authority codes for command types */
488
489 #define PERMIT_OPEN 0
490 #define PERMIT_LOCAL 1
491 #define PERMIT_AUTH 2
492
493 /* ================================================== */
494
495 /* Reply codes */
496 #define RPY_NULL 1
497 #define RPY_N_SOURCES 2
498 #define RPY_SOURCE_DATA 3
499 #define RPY_MANUAL_TIMESTAMP 4
500 #define RPY_TRACKING 5
501 #define RPY_SOURCESTATS 6
502 #define RPY_RTC 7
503 #define RPY_SUBNETS_ACCESSED 8
504 #define RPY_CLIENT_ACCESSES 9
505 #define RPY_CLIENT_ACCESSES_BY_INDEX 10
506 #define RPY_MANUAL_LIST 11
507 #define RPY_ACTIVITY 12
508 #define RPY_SMOOTHING 13
509 #define RPY_SERVER_STATS 14
510 #define RPY_CLIENT_ACCESSES_BY_INDEX2 15
511 #define RPY_NTP_DATA 16
512 #define RPY_MANUAL_TIMESTAMP2 17
513 #define RPY_MANUAL_LIST2 18
514 #define RPY_NTP_SOURCE_NAME 19
515 #define RPY_AUTH_DATA 20
516 #define RPY_CLIENT_ACCESSES_BY_INDEX3 21
517 #define RPY_SERVER_STATS2 22
518 #define RPY_SELECT_DATA 23
519 #define N_REPLY_TYPES 24
520
521 /* Status codes */
522 #define STT_SUCCESS 0
523 #define STT_FAILED 1
524 #define STT_UNAUTH 2
525 #define STT_INVALID 3
526 #define STT_NOSUCHSOURCE 4
527 #define STT_INVALIDTS 5
528 #define STT_NOTENABLED 6
529 #define STT_BADSUBNET 7
530 #define STT_ACCESSALLOWED 8
531 #define STT_ACCESSDENIED 9
532 /* Deprecated */
533 #define STT_NOHOSTACCESS 10
534 #define STT_SOURCEALREADYKNOWN 11
535 #define STT_TOOMANYSOURCES 12
536 #define STT_NORTC 13
537 #define STT_BADRTCFILE 14
538 #define STT_INACTIVE 15
539 #define STT_BADSAMPLE 16
540 #define STT_INVALIDAF 17
541 #define STT_BADPKTVERSION 18
542 #define STT_BADPKTLENGTH 19
543 #define STT_INVALIDNAME 21
544
545 typedef struct {
546 int32_t EOR;
547 } RPY_Null;
548
549 typedef struct {
550 uint32_t n_sources;
551 int32_t EOR;
552 } RPY_N_Sources;
553
554 #define RPY_SD_MD_CLIENT 0
555 #define RPY_SD_MD_PEER 1
556 #define RPY_SD_MD_REF 2
557
558 #define RPY_SD_ST_SELECTED 0
559 #define RPY_SD_ST_NONSELECTABLE 1
560 #define RPY_SD_ST_FALSETICKER 2
561 #define RPY_SD_ST_JITTERY 3
562 #define RPY_SD_ST_UNSELECTED 4
563 #define RPY_SD_ST_SELECTABLE 5
564
565 typedef struct {
566 IPAddr ip_addr;
567 int16_t poll;
568 uint16_t stratum;
569 uint16_t state;
570 uint16_t mode;
571 uint16_t flags;
572 uint16_t reachability;
573 uint32_t since_sample;
574 Float orig_latest_meas;
575 Float latest_meas;
576 Float latest_meas_err;
577 int32_t EOR;
578 } RPY_Source_Data;
579
580 typedef struct {
581 uint32_t ref_id;
582 IPAddr ip_addr;
583 uint16_t stratum;
584 uint16_t leap_status;
585 Timespec ref_time;
586 Float current_correction;
587 Float last_offset;
588 Float rms_offset;
589 Float freq_ppm;
590 Float resid_freq_ppm;
591 Float skew_ppm;
592 Float root_delay;
593 Float root_dispersion;
594 Float last_update_interval;
595 int32_t EOR;
596 } RPY_Tracking;
597
598 typedef struct {
599 uint32_t ref_id;
600 IPAddr ip_addr;
601 uint32_t n_samples;
602 uint32_t n_runs;
603 uint32_t span_seconds;
604 Float sd;
605 Float resid_freq_ppm;
606 Float skew_ppm;
607 Float est_offset;
608 Float est_offset_err;
609 int32_t EOR;
610 } RPY_Sourcestats;
611
612 typedef struct {
613 Timespec ref_time;
614 uint16_t n_samples;
615 uint16_t n_runs;
616 uint32_t span_seconds;
617 Float rtc_seconds_fast;
618 Float rtc_gain_rate_ppm;
619 int32_t EOR;
620 } RPY_Rtc;
621
622 typedef struct {
623 Float offset;
624 Float dfreq_ppm;
625 Float new_afreq_ppm;
626 int32_t EOR;
627 } RPY_ManualTimestamp;
628
629 typedef struct {
630 IPAddr ip;
631 uint32_t ntp_hits;
632 uint32_t nke_hits;
633 uint32_t cmd_hits;
634 uint32_t ntp_drops;
635 uint32_t nke_drops;
636 uint32_t cmd_drops;
637 int8_t ntp_interval;
638 int8_t nke_interval;
639 int8_t cmd_interval;
640 int8_t ntp_timeout_interval;
641 uint32_t last_ntp_hit_ago;
642 uint32_t last_nke_hit_ago;
643 uint32_t last_cmd_hit_ago;
644 } RPY_ClientAccesses_Client;
645
646 typedef struct {
647 uint32_t n_indices; /* how many indices there are in the server's table */
648 uint32_t next_index; /* the index 1 beyond those processed on this call */
649 uint32_t n_clients; /* the number of valid entries in the following array */
650 RPY_ClientAccesses_Client clients[MAX_CLIENT_ACCESSES];
651 int32_t EOR;
652 } RPY_ClientAccessesByIndex;
653
654 typedef struct {
655 uint32_t ntp_hits;
656 uint32_t nke_hits;
657 uint32_t cmd_hits;
658 uint32_t ntp_drops;
659 uint32_t nke_drops;
660 uint32_t cmd_drops;
661 uint32_t log_drops;
662 uint32_t ntp_auth_hits;
663 int32_t EOR;
664 } RPY_ServerStats;
665
666 #define MAX_MANUAL_LIST_SAMPLES 16
667
668 typedef struct {
669 Timespec when;
670 Float slewed_offset;
671 Float orig_offset;
672 Float residual;
673 } RPY_ManualListSample;
674
675 typedef struct {
676 uint32_t n_samples;
677 RPY_ManualListSample samples[MAX_MANUAL_LIST_SAMPLES];
678 int32_t EOR;
679 } RPY_ManualList;
680
681 typedef struct {
682 int32_t online;
683 int32_t offline;
684 int32_t burst_online;
685 int32_t burst_offline;
686 int32_t unresolved;
687 int32_t EOR;
688 } RPY_Activity;
689
690 #define RPY_SMT_FLAG_ACTIVE 0x1
691 #define RPY_SMT_FLAG_LEAPONLY 0x2
692
693 typedef struct {
694 uint32_t flags;
695 Float offset;
696 Float freq_ppm;
697 Float wander_ppm;
698 Float last_update_ago;
699 Float remaining_time;
700 int32_t EOR;
701 } RPY_Smoothing;
702
703 #define RPY_NTP_FLAGS_TESTS 0x3ff
704 #define RPY_NTP_FLAG_INTERLEAVED 0x4000
705 #define RPY_NTP_FLAG_AUTHENTICATED 0x8000
706
707 typedef struct {
708 IPAddr remote_addr;
709 IPAddr local_addr;
710 uint16_t remote_port;
711 uint8_t leap;
712 uint8_t version;
713 uint8_t mode;
714 uint8_t stratum;
715 int8_t poll;
716 int8_t precision;
717 Float root_delay;
718 Float root_dispersion;
719 uint32_t ref_id;
720 Timespec ref_time;
721 Float offset;
722 Float peer_delay;
723 Float peer_dispersion;
724 Float response_time;
725 Float jitter_asymmetry;
726 uint16_t flags;
727 uint8_t tx_tss_char;
728 uint8_t rx_tss_char;
729 uint32_t total_tx_count;
730 uint32_t total_rx_count;
731 uint32_t total_valid_count;
732 uint32_t reserved[4];
733 int32_t EOR;
734 } RPY_NTPData;
735
736 typedef struct {
737 uint8_t name[256];
738 int32_t EOR;
739 } RPY_NTPSourceName;
740
741 #define RPY_AD_MD_NONE 0
742 #define RPY_AD_MD_SYMMETRIC 1
743 #define RPY_AD_MD_NTS 2
744
745 typedef struct {
746 uint16_t mode;
747 uint16_t key_type;
748 uint32_t key_id;
749 uint16_t key_length;
750 uint16_t ke_attempts;
751 uint32_t last_ke_ago;
752 uint16_t cookies;
753 uint16_t cookie_length;
754 uint16_t nak;
755 uint16_t pad;
756 int32_t EOR;
757 } RPY_AuthData;
758
759 #define RPY_SD_OPTION_NOSELECT 0x1
760 #define RPY_SD_OPTION_PREFER 0x2
761 #define RPY_SD_OPTION_TRUST 0x4
762 #define RPY_SD_OPTION_REQUIRE 0x8
763
764 typedef struct {
765 uint32_t ref_id;
766 IPAddr ip_addr;
767 uint8_t state_char;
768 uint8_t authentication;
769 uint8_t leap;
770 uint8_t pad;
771 uint16_t conf_options;
772 uint16_t eff_options;
773 uint32_t last_sample_ago;
774 Float score;
775 Float lo_limit;
776 Float hi_limit;
777 int32_t EOR;
778 } RPY_SelectData;
779
780 typedef struct {
781 uint8_t version;
782 uint8_t pkt_type;
783 uint8_t res1;
784 uint8_t res2;
785 uint16_t command; /* Which command is being replied to */
786 uint16_t reply; /* Which format of reply this is */
787 uint16_t status; /* Status of command processing */
788 uint16_t pad1; /* Padding for compatibility and 4 byte alignment */
789 uint16_t pad2;
790 uint16_t pad3;
791 uint32_t sequence; /* Echo of client's sequence number */
792 uint32_t pad4;
793 uint32_t pad5;
794
795 union {
796 RPY_Null null;
797 RPY_N_Sources n_sources;
798 RPY_Source_Data source_data;
799 RPY_ManualTimestamp manual_timestamp;
800 RPY_Tracking tracking;
801 RPY_Sourcestats sourcestats;
802 RPY_Rtc rtc;
803 RPY_ClientAccessesByIndex client_accesses_by_index;
804 RPY_ServerStats server_stats;
805 RPY_ManualList manual_list;
806 RPY_Activity activity;
807 RPY_Smoothing smoothing;
808 RPY_NTPData ntp_data;
809 RPY_NTPSourceName ntp_source_name;
810 RPY_AuthData auth_data;
811 RPY_SelectData select_data;
812 } data; /* Reply specific parameters */
813
814 } CMD_Reply;
815
816 /* ================================================== */
817
818 #endif /* GOT_CANDM_H */