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