1 0 stevel /* 2 0 stevel * CDDL HEADER START 3 0 stevel * 4 0 stevel * The contents of this file are subject to the terms of the 5 0 stevel * Common Development and Distribution License, Version 1.0 only 6 0 stevel * (the "License"). You may not use this file except in compliance 7 0 stevel * with the License. 8 0 stevel * 9 0 stevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 0 stevel * or http://www.opensolaris.org/os/licensing. 11 0 stevel * See the License for the specific language governing permissions 12 0 stevel * and limitations under the License. 13 0 stevel * 14 0 stevel * When distributing Covered Code, include this CDDL HEADER in each 15 0 stevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 0 stevel * If applicable, add the following below this CDDL HEADER, with the 17 0 stevel * fields enclosed by brackets "[]" replaced with your own identifying 18 0 stevel * information: Portions Copyright [yyyy] [name of copyright owner] 19 0 stevel * 20 0 stevel * CDDL HEADER END 21 0 stevel */ 22 0 stevel /* 23 410 kcpoon * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 24 0 stevel * Use is subject to license terms. 25 0 stevel */ 26 0 stevel 27 0 stevel /* 28 0 stevel * University Copyright- Copyright (c) 1982, 1986, 1988 29 0 stevel * The Regents of the University of California 30 0 stevel * All Rights Reserved 31 0 stevel * 32 0 stevel * University Acknowledgment- Portions of this document are derived from 33 0 stevel * software developed by the University of California, Berkeley, and its 34 0 stevel * contributors. 35 0 stevel */ 36 0 stevel 37 0 stevel #ifndef _NTP_H 38 0 stevel #define _NTP_H 39 0 stevel 40 0 stevel #pragma ident "%Z%%M% %I% %E% SMI" 41 0 stevel 42 0 stevel #ifdef __cplusplus 43 0 stevel extern "C" { 44 0 stevel #endif 45 0 stevel 46 0 stevel /* $Source: /usr/users/louie/ntp/RCS/ntp.h,v $ */ 47 0 stevel /* $Revision: 3.4.1.5 $ $Date: 89/04/10 15:55:42 $ */ 48 0 stevel 49 0 stevel /* 50 0 stevel * $Log: ntp.h,v $ 51 0 stevel * Revision 3.4.1.5 89/04/10 15:55:42 louie 52 0 stevel * Provide default value for number of bits/byte if not defined. Compute the 53 0 stevel * Window shift mask inside of conditional code on XTAL so we get the correct 54 0 stevel * value if configured without a crystal controled clock (!!) 55 0 stevel * 56 0 stevel * Revision 3.4.1.4 89/03/31 16:34:50 louie 57 0 stevel * Add bit in flags which allow a peer to be synced to. Changed a char to a bit 58 0 stevel * field so that it is always signed. 59 0 stevel * 60 0 stevel * Revision 3.4.1.3 89/03/29 12:26:18 louie 61 0 stevel * Removed some unused #defines. Replaced MAXSTRATUM with NTP_INFIN per new 62 0 stevel * spec. The variable 'mode' in the peer structure has been renamed 'hmode' 63 0 stevel * per the new spec. 64 0 stevel * 65 0 stevel * Revision 3.4.1.2 89/03/22 18:28:18 louie 66 0 stevel * patch3: Use new RCS headers. 67 0 stevel * 68 0 stevel * Revision 3.4.1.1 89/03/20 00:02:53 louie 69 0 stevel * 1 70 0 stevel * 71 0 stevel * Revision 3.4 89/03/17 18:37:00 louie 72 0 stevel * Latest test release. 73 0 stevel * 74 0 stevel * Revision 3.3.1.1 89/03/17 18:23:49 louie 75 0 stevel * Change CLOCK_FACTOR to be a power of 2. 76 0 stevel * 77 0 stevel * Revision 3.3 89/03/15 14:19:36 louie 78 0 stevel * New baseline for next release. 79 0 stevel * 80 0 stevel * Revision 3.2.1.2 89/03/15 13:46:52 louie 81 0 stevel * The version number for that particular flavor of ntpd <--> ntpdc interaction 82 0 stevel * is now defined by NTPDC_VERSION. The packet format for the ntpdc program 83 0 stevel * has changed slightly to improve robustness when dealing with multiple packets 84 0 stevel * of status data. 85 0 stevel * 86 0 stevel * Revision 3.2.1.1 89/03/09 17:11:24 louie 87 0 stevel * patch1: Updated constants, which were previously in incorrect units. 88 0 stevel * 89 0 stevel * Revision 3.2 89/03/07 18:21:45 louie 90 0 stevel * New version of UNIX NTP daemon and software based on the 6 March 1989 91 0 stevel * draft of the new NTP protocol specification. This version doesn't 92 0 stevel * implement authentication, and accepts and send only NTP Version 1 93 0 stevel * packets. 94 0 stevel * 95 0 stevel * Revision 3.1.1.1 89/02/15 08:54:42 louie 96 0 stevel * *** empty log message *** 97 0 stevel * 98 0 stevel * 99 0 stevel * Revision 3.1 89/01/30 14:43:07 louie 100 0 stevel * Second UNIX NTP test release. 101 0 stevel * 102 0 stevel * Revision 3.0 88/12/12 16:01:07 louie 103 0 stevel * Test release of new UNIX NTP software. This version should conform to the 104 0 stevel * revised NTP protocol specification. 105 0 stevel * 106 0 stevel */ 107 0 stevel 108 0 stevel #ifndef FD_SET 109 0 stevel #define NFDBITS 32 110 0 stevel #define FD_SETSIZE 32 111 0 stevel #define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS))) 112 0 stevel #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS))) 113 0 stevel #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS))) 114 0 stevel #define FD_ZERO(p) bzero((char *)(p), sizeof (*(p))) 115 0 stevel #endif 116 0 stevel 117 0 stevel #ifndef NBBY 118 0 stevel #define NBBY 8 /* number of bits per byte */ 119 0 stevel #endif 120 0 stevel 121 0 stevel #define MAXNETIF 10 122 0 stevel 123 0 stevel struct intf { 124 0 stevel int fd; 125 0 stevel char *name; 126 0 stevel struct sockaddr_in sin; 127 0 stevel struct sockaddr_in bcast; 128 0 stevel struct sockaddr_in mask; 129 0 stevel int uses; 130 0 stevel int if_flags; 131 0 stevel }; 132 0 stevel extern struct intf addrs[]; 133 0 stevel extern int nintf; 134 0 stevel 135 0 stevel /* 136 0 stevel * Definitions for the masses 137 0 stevel */ 138 410 kcpoon #define JAN_1970 2208988800U /* 1970 - 1900 in seconds */ 139 0 stevel 140 0 stevel /* 141 0 stevel * Daemon specific (ntpd.c) 142 0 stevel */ 143 0 stevel #define SHIFT_MASK 0xff /* number of intervals to wait */ 144 0 stevel 145 0 stevel #ifndef WAYTOOBIG 146 0 stevel #define WAYTOOBIG 1000.0 /* Too many seconds to correct, something is */ 147 0 stevel /* really wrong */ 148 0 stevel #endif 149 0 stevel 150 0 stevel #ifndef XTAL 151 0 stevel #define XTAL 1 /* crystal controlled clock by default */ 152 0 stevel #endif 153 0 stevel 154 0 stevel #ifndef NTPINITFILE 155 0 stevel #define NTPINITFILE "/etc/ntp.conf" 156 0 stevel #endif 157 0 stevel 158 0 stevel struct list { 159 0 stevel struct ntp_peer *head; 160 0 stevel struct ntp_peer *tail; 161 0 stevel int members; 162 0 stevel }; 163 0 stevel 164 0 stevel #define STRMCMP(a, cond, b) \ 165 0 stevel (((a) == UNSPECIFIED ? NTP_INFIN+1 : a) cond \ 166 0 stevel ((b) == UNSPECIFIED ? NTP_INFIN+1 : (b))) 167 0 stevel 168 0 stevel 169 0 stevel /* 170 0 stevel * Definitions outlined in the NTP spec 171 0 stevel */ 172 0 stevel #define NTP_VERSION 1 173 0 stevel #define NTP_PORT 123 /* for ref only (see /etc/services) */ 174 0 stevel #define NTP_INFIN 15 175 0 stevel #define NTP_MAXAGE 86400 176 0 stevel #define NTP_MAXSKW 0.01 /* seconds */ 177 0 stevel #define NTP_MINDIST 0.02 /* seconds */ 178 0 stevel #define NTP_MINPOLL 6 /* (64) seconds between messages */ 179 0 stevel #define NTP_MAXPOLL 10 /* (1024) secs to poll */ 180 0 stevel #define NTP_WINDOW 8 /* size of shift register */ 181 0 stevel #define NTP_MAXWGT 8 /* maximum allowable dispersion */ 182 0 stevel #define NTP_MAXLIST 5 /* max size of selection list */ 183 0 stevel #define NTP_MAXSTRA 2 /* max number of strata in selection list */ 184 0 stevel #define X_NTP_CANDIDATES 64 /* number of peers to consider when doing */ 185 0 stevel /* clock selection */ 186 0 stevel #define NTP_SELECT 0.75 /* weight used to compute dispersion */ 187 0 stevel 188 0 stevel #define PEER_MAXDISP 64.0 /* Maximum dispersion */ 189 0 stevel #define PEER_THRESHOLD 0.5 /* dispersion threshold */ 190 0 stevel #define PEER_FILTER 0.5 /* filter weight */ 191 0 stevel 192 0 stevel #if XTAL == 0 193 0 stevel #define PEER_SHIFT 4 194 0 stevel #define NTP_WINDOW_SHIFT_MASK 0x0f 195 0 stevel #else 196 0 stevel #define PEER_SHIFT 8 197 0 stevel #define NTP_WINDOW_SHIFT_MASK 0xff 198 0 stevel #endif 199 0 stevel 200 0 stevel 201 0 stevel /* 202 0 stevel * 5.1 Uniform Phase Adjustments 203 0 stevel * Clock parameters 204 0 stevel */ 205 0 stevel #define CLOCK_UPDATE 8 /* update interval (1<<CLOCK_UPDATE secs) */ 206 0 stevel #if XTAL 207 0 stevel #define CLOCK_ADJ 2 /* adjustment interval (1<<CLOCK_ADJ secs) */ 208 0 stevel #define CLOCK_PHASE 8 /* phase shift */ 209 0 stevel #define CLOCK_MAX 0.128 /* maximum aperture (milliseconds) */ 210 0 stevel #else 211 0 stevel #define CLOCK_ADJ 0 212 0 stevel #define CLOCK_PHASE 6 /* phase shift */ 213 0 stevel #define CLOCK_MAX 0.512 /* maximum aperture (milliseconds) */ 214 0 stevel #endif 215 0 stevel #define CLOCK_FREQ 10 /* frequency shift */ 216 0 stevel #define CLOCK_TRACK 8 217 0 stevel #define CLOCK_COMP 4 218 0 stevel #define CLOCK_FACTOR 18 219 0 stevel 220 0 stevel /* 221 0 stevel * Structure definitions for NTP fixed point values 222 0 stevel * 223 0 stevel * 0 1 2 3 224 0 stevel * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 225 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 226 0 stevel * | Integer Part | 227 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 228 0 stevel * | Fraction Part | 229 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 230 0 stevel * 231 0 stevel * 232 0 stevel * 0 1 2 3 233 0 stevel * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 234 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 235 0 stevel * | Integer Part | Fraction Part | 236 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 237 0 stevel */ 238 0 stevel struct l_fixedpt { 239 410 kcpoon ulong_t int_part; 240 410 kcpoon ulong_t fraction; 241 0 stevel }; 242 0 stevel 243 0 stevel struct s_fixedpt { 244 410 kcpoon ushort_t int_part; 245 410 kcpoon ushort_t fraction; 246 0 stevel }; 247 0 stevel 248 0 stevel /* 249 0 stevel * ================= Table 3.3. Packet Variables ================= 250 0 stevel * 0 1 2 3 251 0 stevel * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 252 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 253 0 stevel * |LI | VN | Mode| Stratum | Poll | Precision | 254 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 255 0 stevel * | Synchronizing Distance | 256 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 257 0 stevel * | Synchronizing Dispersion | 258 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 259 0 stevel * | Reference Clock Identifier | 260 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 261 0 stevel * | | 262 0 stevel * | Reference Timestamp (64 bits) | 263 0 stevel * | | 264 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 265 0 stevel * | | 266 0 stevel * | Originate Timestamp (64 bits) | 267 0 stevel * | | 268 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 269 0 stevel * | | 270 0 stevel * | Receive Timestamp (64 bits) | 271 0 stevel * | | 272 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 273 0 stevel * | | 274 0 stevel * | Transmit Timestamp (64 bits) | 275 0 stevel * | | 276 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 277 0 stevel * | Encryption Keyid (32 bits, when A bit set) | 278 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 279 0 stevel * | | 280 0 stevel * | Message Authentication Code/MAC (when A bit set) | 281 0 stevel * | | 282 0 stevel * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 283 0 stevel */ 284 0 stevel 285 0 stevel #define MAC_OCTETS_DES 8 286 0 stevel #define MAC_OCTETS_MD5 16 287 0 stevel #define MAC_OCTETS_MIN MAC_OCTETS_DES 288 0 stevel #define MAC_OCTETS_MAX MAC_OCTETS_MD5 289 0 stevel #define AUTH_OCTETS_V3 (MAC_OCTETS_MAX + sizeof (uint32_t)) 290 0 stevel 291 0 stevel struct ntpdata { 292 410 kcpoon uchar_t li_vn_mode; /* contains leap indicator, version and mode */ 293 410 kcpoon uchar_t stratum; /* Stratum level */ 294 410 kcpoon uchar_t ppoll; /* poll value */ 295 0 stevel int precision:8; 296 0 stevel struct s_fixedpt distance; 297 0 stevel struct s_fixedpt dispersion; 298 410 kcpoon ulong_t refid; 299 0 stevel struct l_fixedpt reftime; 300 0 stevel struct l_fixedpt org; 301 0 stevel struct l_fixedpt rec; 302 0 stevel struct l_fixedpt xmt; 303 0 stevel uint32_t keyid; 304 410 kcpoon uchar_t mac[MAC_OCTETS_MAX]; 305 0 stevel }; 306 0 stevel 307 0 stevel #define LEN_PKT_NOMAC (sizeof (struct ntpdata) - AUTH_OCTETS_V3) 308 0 stevel 309 0 stevel /* 310 0 stevel * Leap Second Codes (high order two bits) 311 0 stevel */ 312 0 stevel #define NO_WARNING 0x00 /* no warning */ 313 0 stevel #define PLUS_SEC 0x40 /* add a second (61 seconds) */ 314 0 stevel #define MINUS_SEC 0x80 /* minus a second (59 seconds) */ 315 0 stevel #define ALARM 0xc0 /* alarm condition (clock unsynchronized) */ 316 0 stevel 317 0 stevel /* 318 0 stevel * Clock Status Bits that Encode Version 319 0 stevel */ 320 0 stevel #define NTPVERSION_1 0x08 321 0 stevel #define VERSIONMASK 0x38 322 0 stevel #define LEAPMASK 0xc0 323 0 stevel #define NTPMODEMASK 0x07 324 0 stevel 325 0 stevel /* 326 0 stevel * Code values 327 0 stevel */ 328 0 stevel #define MODE_UNSPEC 0 /* unspecified */ 329 0 stevel #define MODE_SYM_ACT 1 /* symmetric active */ 330 0 stevel #define MODE_SYM_PAS 2 /* symmetric passive */ 331 0 stevel #define MODE_CLIENT 3 /* client */ 332 0 stevel #define MODE_SERVER 4 /* server */ 333 0 stevel #define MODE_BROADCAST 5 /* broadcast */ 334 0 stevel #define MODE_CONTROL 6 /* control */ 335 0 stevel #define MODE_PRIVATE 7 /* private */ 336 0 stevel 337 0 stevel /* 338 0 stevel * Stratum Definitions 339 0 stevel */ 340 0 stevel #define UNSPECIFIED 0 341 0 stevel #define PRIM_REF 1 /* radio clock */ 342 0 stevel #define INFO_QUERY 62 /* **** THIS implementation dependent **** */ 343 0 stevel #define INFO_REPLY 63 /* **** THIS implementation dependent **** */ 344 0 stevel 345 0 stevel 346 0 stevel /* ================= table 3.2 Peer Variables ================= */ 347 0 stevel struct ntp_peer { 348 0 stevel struct ntp_peer *next, *prev; 349 0 stevel struct sockaddr_in src; /* both peer.srcadr and peer.srcport */ 350 0 stevel int flags; /* local flags */ 351 0 stevel #define PEER_FL_CONFIG 1 352 0 stevel #define PEER_FL_AUTHENABLE 2 353 0 stevel #define PEER_FL_SYNC 0x1000 /* peer can bet sync'd to */ 354 0 stevel #define PEER_FL_BCAST 0x2000 /* broadcast peer */ 355 0 stevel #define PEER_FL_SELECTED 0x8000 /* actually used by query routine */ 356 0 stevel 357 0 stevel int sock; /* index into sockets to derive */ 358 0 stevel /* peer.dstadr and peer.dstport */ 359 410 kcpoon uchar_t leap; /* receive */ 360 410 kcpoon uchar_t hmode; /* receive */ 361 410 kcpoon uchar_t stratum; /* receive */ 362 410 kcpoon uchar_t ppoll; /* receive */ 363 410 kcpoon uchar_t hpoll; /* poll update */ 364 0 stevel short precision; /* receive */ 365 0 stevel struct s_fixedpt distance; /* receive */ 366 0 stevel struct s_fixedpt dispersion; /* receive */ 367 410 kcpoon ulong_t refid; /* receive */ 368 0 stevel struct l_fixedpt reftime; /* receive */ 369 0 stevel struct l_fixedpt org; /* receive, clear */ 370 0 stevel struct l_fixedpt rec; /* receive, clear */ 371 0 stevel struct l_fixedpt xmt; /* transmit, clear */ 372 410 kcpoon ulong_t reach; /* receive, transmit, clear */ 373 410 kcpoon ulong_t valid; /* packet, transmit, clear */ 374 410 kcpoon ulong_t timer; /* receive, transmit, poll update */ 375 0 stevel long stopwatch; /* <<local>> for timing */ 376 0 stevel /* 377 0 stevel * first order offsets 378 0 stevel */ 379 0 stevel struct filter { 380 0 stevel short samples; /* <<local>> */ 381 0 stevel double offset[PEER_SHIFT]; 382 0 stevel double delay[PEER_SHIFT]; 383 0 stevel } filter; /* filter, clear */ 384 0 stevel 385 0 stevel double estdelay; /* filter */ 386 0 stevel double estoffset; /* filter */ 387 0 stevel double estdisp; /* filter */ 388 0 stevel 389 410 kcpoon ulong_t pkt_sent; /* <<local>> */ 390 410 kcpoon ulong_t pkt_rcvd; /* <<local>> */ 391 410 kcpoon ulong_t pkt_dropped; /* <<local>> */ 392 0 stevel }; 393 0 stevel 394 0 stevel /* ================= table 3.1: System Variables ================= */ 395 0 stevel 396 0 stevel struct sysdata { /* procedure */ 397 410 kcpoon uchar_t leap; /* clock update */ 398 410 kcpoon uchar_t stratum; /* clock update */ 399 0 stevel short precision; /* system */ 400 0 stevel struct s_fixedpt distance; /* clock update */ 401 0 stevel struct s_fixedpt dispersion; /* clock update */ 402 410 kcpoon ulong_t refid; /* clock update */ 403 0 stevel struct l_fixedpt reftime; /* clock update */ 404 0 stevel int hold; /* clock update */ 405 0 stevel struct ntp_peer *peer; /* selection */ 406 0 stevel int maxpeers; /* <<local>> */ 407 410 kcpoon uchar_t filler; /* put here for %&*%$$ SUNs */ 408 0 stevel }; 409 0 stevel 410 0 stevel #define NTPDC_VERSION 2 411 0 stevel 412 0 stevel /* 413 0 stevel * These structures are used to pass information to the ntpdc (control) 414 0 stevel * program. They are unique to this implementation and not part of the 415 0 stevel * NTP specification. 416 0 stevel */ 417 0 stevel struct clockinfo { 418 410 kcpoon ulong_t net_address; 419 410 kcpoon ulong_t my_address; 420 410 kcpoon ushort_t port; 421 410 kcpoon ushort_t flags; 422 410 kcpoon ulong_t pkt_sent; 423 410 kcpoon ulong_t pkt_rcvd; 424 410 kcpoon ulong_t pkt_dropped; 425 410 kcpoon ulong_t timer; 426 410 kcpoon uchar_t leap; 427 410 kcpoon uchar_t stratum; 428 410 kcpoon uchar_t ppoll; 429 0 stevel int precision:8; 430 0 stevel 431 410 kcpoon uchar_t hpoll; 432 410 kcpoon uchar_t filler1; 433 410 kcpoon ushort_t reach; 434 0 stevel 435 0 stevel long estdisp; /* scaled by 1000 */ 436 0 stevel long estdelay; /* in milliseconds */ 437 0 stevel long estoffset; /* in milliseconds */ 438 410 kcpoon ulong_t refid; 439 0 stevel struct l_fixedpt reftime; 440 0 stevel struct info_filter { 441 0 stevel short index; 442 0 stevel short filler; 443 0 stevel long offset[PEER_SHIFT]; /* in milliseconds */ 444 0 stevel long delay[PEER_SHIFT]; /* in milliseconds */ 445 0 stevel } info_filter; 446 0 stevel }; 447 0 stevel 448 0 stevel struct ntpinfo { 449 410 kcpoon uchar_t version; 450 410 kcpoon uchar_t type; /* request type (stratum in ntp packets) */ 451 410 kcpoon uchar_t count; /* number of entries in this packet */ 452 410 kcpoon uchar_t seq; /* sequence number of this packet */ 453 0 stevel 454 410 kcpoon uchar_t npkts; /* total number of packets */ 455 410 kcpoon uchar_t peers; 456 410 kcpoon uchar_t fill3; 457 410 kcpoon uchar_t fill4; 458 0 stevel }; 459 0 stevel 460 0 stevel /* 461 0 stevel * From usr/src/cmd/xntpd/include/ntp_control.h: 462 0 stevel * Definition of a mode 6 packet. 463 0 stevel */ 464 0 stevel struct ntp_control { 465 410 kcpoon uchar_t li_vn_mode; /* leap, version, mode */ 466 410 kcpoon uchar_t r_m_e_op; /* response, more, error, opcode */ 467 410 kcpoon ushort_t sequence; /* sequence number of request */ 468 410 kcpoon ushort_t status; /* status word for association */ 469 410 kcpoon ushort_t associd; /* association ID */ 470 410 kcpoon ushort_t offset; /* offset of this batch of data */ 471 410 kcpoon ushort_t count; /* count of data in this packet */ 472 410 kcpoon uchar_t data[1]; /* data + auth */ 473 0 stevel }; 474 0 stevel 475 0 stevel #define NTPC_DATA_MAXLEN (480 + AUTH_OCTETS_V3) 476 0 stevel 477 0 stevel /* 478 0 stevel * Decoding for the r_m_e_op field 479 0 stevel */ 480 0 stevel #define CTL_RESPONSE 0x80 481 0 stevel #define CTL_ERROR 0x40 482 0 stevel #define CTL_MORE 0x20 483 0 stevel #define CTL_OP_MASK 0x1f 484 0 stevel 485 0 stevel /* 486 0 stevel * Opcodes 487 0 stevel */ 488 0 stevel #define CTL_OP_UNSPEC 0 489 0 stevel #define CTL_OP_READSTAT 1 490 0 stevel #define CTL_OP_READVAR 2 491 0 stevel #define CTL_OP_WRITEVAR 3 492 0 stevel #define CTL_OP_READCLOCK 4 493 0 stevel #define CTL_OP_WRITECLOCK 5 494 0 stevel #define CTL_OP_SETTRAP 6 495 0 stevel #define CTL_OP_ASYNCMSG 7 496 0 stevel #define CTL_OP_UNSETTRAP 31 497 0 stevel 498 0 stevel /* 499 0 stevel * From usr/src/cmd/xntpd/include/ntp_request.h: 500 0 stevel * A mode 7 packet is used exchanging data between an NTP server 501 0 stevel * and a client for purposes other than time synchronization, e.g. 502 0 stevel * monitoring, statistics gathering and configuration. A mode 7 503 0 stevel * packet has the following format: 504 0 stevel */ 505 0 stevel 506 0 stevel struct ntp_private { 507 410 kcpoon uchar_t rm_vn_mode; /* response, more, version, mode */ 508 410 kcpoon uchar_t auth_seq; /* key, sequence number */ 509 410 kcpoon uchar_t implementation; /* implementation number */ 510 410 kcpoon uchar_t request; /* request number */ 511 410 kcpoon ushort_t err_nitems; /* error code/number of data items */ 512 410 kcpoon ushort_t mbz_itemsize; /* item size */ 513 0 stevel char data[1]; /* data area */ 514 0 stevel }; 515 0 stevel 516 0 stevel #define RESP_BIT 0x80 517 0 stevel #define MORE_BIT 0x40 518 410 kcpoon #define INFO_VERSION(rm_vn_mode) ((uchar_t)(((rm_vn_mode)>>3) & 0x7)) 519 0 stevel #define INFO_MODE(rm_vn_mode) ((rm_vn_mode) & 0x7) 520 0 stevel 521 0 stevel #define AUTH_BIT 0x80 522 0 stevel #define INFO_SEQ(auth_seq) ((auth_seq) & 0x7f) 523 0 stevel 524 410 kcpoon #define INFO_ERR(err_nitems) ((ushort_t)((ntohs(err_nitems) >> 12) & 0xf)) 525 410 kcpoon #define INFO_NITEMS(err_nitems) ((ushort_t)(ntohs(err_nitems) & 0xfff)) 526 0 stevel 527 0 stevel #define INFO_ITEMSIZE(mbz_itemsize) (ntohs(mbz_itemsize) & 0xfff) 528 0 stevel 529 0 stevel #ifdef __cplusplus 530 0 stevel } 531 0 stevel #endif 532 0 stevel 533 0 stevel #endif /* _NTP_H */ 534