2 * ntpq.h - definitions of interest to ntpq
9 #include "ntp_stdlib.h"
10 #include "ntp_string.h"
11 #include "ntp_malloc.h"
12 #include "ntp_assert.h"
13 #include "ntp_control.h"
14 #include "lib_strbuf.h"
17 * Maximum number of arguments
22 * Limit on packets in a single response. Increasing this value to
23 * 96 will marginally speed "mrulist" operation on lossless networks
24 * but it has been observed to cause loss on WiFi networks and with
25 * an IPv6 go6.net tunnel over UDP. That loss causes the request
26 * row limit to be cut in half, and it grows back very slowly to
27 * ensure forward progress is made and loss isn't triggered too quickly
28 * afterward. While the lossless case gains only marginally with
29 * MAXFRAGS == 96, the lossy case is a lot slower due to the repeated
30 * timeouts. Empirally, MAXFRAGS == 32 avoids most of the routine loss
31 * on both the WiFi and UDP v6 tunnel tests and seems a good compromise.
32 * This suggests some device in the path has a limit of 32 ~512 byte UDP
34 * Lowering MAXFRAGS may help with particularly lossy networks, but some
35 * ntpq commands may rely on the longtime value of 24 implicitly,
36 * assuming a single multipacket response will be large enough for any
37 * needs. In contrast, the "mrulist" command is implemented as a series
38 * of requests and multipacket responses to each.
43 * Error codes for internal use
45 #define ERR_UNSPEC 256
46 #define ERR_INCOMPLETE 257
47 #define ERR_TIMEOUT 258
48 #define ERR_TOOMUCH 259
51 * Flags for forming descriptors.
53 #define OPT 0x80 /* this argument is optional, or'd with type */
56 #define NTP_STR 0x1 /* string argument */
57 #define NTP_UINT 0x2 /* unsigned integer */
58 #define NTP_INT 0x3 /* signed integer */
59 #define NTP_ADD 0x4 /* IP network address */
60 #define IP_VERSION 0x5 /* IP version */
61 #define NTP_ADP 0x6 /* IP address and port */
62 #define NTP_LFP 0x7 /* NTP timestamp */
63 #define NTP_MODE 0x8 /* peer mode */
64 #define NTP_2BIT 0x9 /* leap bits */
67 * Arguments are returned in a union
77 * Structure for passing parsed command line
81 arg_v argval[MAXARGS];
86 * ntpdc includes a command parser which could charitably be called
87 * crude. The following structure is used to define the command
91 const char *keyword; /* command key word */
92 void (*handler) (struct parse *, FILE *); /* command handler */
93 u_char arg[MAXARGS]; /* descriptors for arguments */
94 const char *desc[MAXARGS]; /* descriptions for arguments */
99 * Structure to hold association data
107 * mrulist terminal status interval
109 #define MRU_REPORT_SECS 5
112 * var_format is used to override cooked formatting for selected vars.
114 typedef struct var_format_tag {
115 const char * varname;
119 typedef struct chost_tag chost;
125 extern chost chosts[];
127 extern int interactive; /* are we prompting? */
128 extern int old_rv; /* use old rv behavior? --old-rv */
129 extern u_int assoc_cache_slots;/* count of allocated array entries */
130 extern u_int numassoc; /* number of cached associations */
131 extern u_int numhosts;
133 extern void grow_assoc_cache(void);
134 extern void asciize (int, char *, FILE *);
135 extern int getnetnum (const char *, sockaddr_u *, char *, int);
136 extern void sortassoc (void);
137 extern void show_error_msg (int, associd_t);
138 extern int dogetassoc (FILE *);
139 extern int doquery (int, associd_t, int, int, const char *,
140 u_short *, int *, const char **);
141 extern int doqueryex (int, associd_t, int, int, const char *,
142 u_short *, int *, const char **, int);
143 extern const char * nntohost (sockaddr_u *);
144 extern const char * nntohost_col (sockaddr_u *, size_t, int);
145 extern const char * nntohostp (sockaddr_u *);
146 extern int decodets (char *, l_fp *);
147 extern int decodeuint (char *, u_long *);
148 extern int nextvar (int *, const char **, char **, char **);
149 extern int decodetime (char *, l_fp *);
150 extern void printvars (int, const char *, int, int, int, FILE *);
151 extern int decodeint (char *, long *);
152 extern void makeascii (int, const char *, FILE *);
153 extern const char * trunc_left (const char *, size_t);
154 extern const char * trunc_right(const char *, size_t);