root/usr.sbin/tcpdump/ntp.h
/*      $OpenBSD: ntp.h,v 1.7 2007/10/07 16:41:05 deraadt Exp $ */

/* $Id: ntp.h,v 1.7 2007/10/07 16:41:05 deraadt Exp $ */

/*
 * Based on ntp.h from the U of MD implementation
 *      This file is based on Version 2 of the NTP spec (RFC1119).
 */

/*
 *  Definitions for the masses
 */
#define JAN_1970        2208988800      /* 1970 - 1900 in seconds */

/*
 * Structure definitions for NTP fixed point values
 *
 *    0                   1                   2                   3
 *    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
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                         Integer Part                          |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                         Fraction Part                         |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *
 *    0                   1                   2                   3
 *    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
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |            Integer Part       |     Fraction Part             |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
struct l_fixedpt {
        u_int32_t int_part;
        u_int32_t fraction;
};

struct s_fixedpt {
        u_short int_part;
        u_short fraction;
};

/*  =================  Table 3.3. Packet Variables   ================= */
/*
 *    0                   1                   2                   3
 *    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
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |LI | VN  | Mode|    Stratum    |      Poll     |   Precision   |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                     Synchronizing Distance                    |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                    Synchronizing Dispersion                   |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                  Reference Clock Identifier                   |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                                                               |
 *   |                 Reference Timestamp (64 bits)                 |
 *   |                                                               |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                                                               |
 *   |                 Originate Timestamp (64 bits)                 |
 *   |                                                               |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                                                               |
 *   |                  Receive Timestamp (64 bits)                  |
 *   |                                                               |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *   |                                                               |
 *   |                  Transmit Timestamp (64 bits)                 |
 *   |                                                               |
 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
struct ntpdata {
        u_char status;          /* status of local clock and leap info */
        u_char stratum;         /* Stratum level */
        u_char ppoll;           /* poll value */
        int precision:8;
        struct s_fixedpt distance;
        struct s_fixedpt dispersion;
        u_int32_t refid;
        struct l_fixedpt reftime;
        struct l_fixedpt org;
        struct l_fixedpt rec;
        struct l_fixedpt xmt;
};
/*
 *      Leap Second Codes (high order two bits)
 */
#define NO_WARNING      0x00    /* no warning */
#define PLUS_SEC        0x40    /* add a second (61 seconds) */
#define MINUS_SEC       0x80    /* minus a second (59 seconds) */
#define ALARM           0xc0    /* alarm condition (clock unsynchronized) */

/*
 *      Clock Status Bits that Encode Version
 */
#define NTPVERSION_1    0x08
#define VERSIONMASK     0x38
#define LEAPMASK        0xc0
#define MODEMASK        0x07

/*
 *      Code values
 */
#define MODE_UNSPEC     0       /* unspecified */
#define MODE_SYM_ACT    1       /* symmetric active */
#define MODE_SYM_PAS    2       /* symmetric passive */
#define MODE_CLIENT     3       /* client */
#define MODE_SERVER     4       /* server */
#define MODE_BROADCAST  5       /* broadcast */
#define MODE_RES1       6       /* reserved */
#define MODE_RES2       7       /* reserved */

/*
 *      Stratum Definitions
 */
#define UNSPECIFIED     0
#define PRIM_REF        1       /* radio clock */
#define INFO_QUERY      62      /* **** THIS implementation dependent **** */
#define INFO_REPLY      63      /* **** THIS implementation dependent **** */