libntpq.h revision 289997
1129473Spjd/*****************************************************************************
2142727Spjd *
3129473Spjd *  libntpq.h
4129473Spjd *
5129473Spjd *  This is the wrapper library for ntpq, the NTP query utility.
6129473Spjd *  This library reuses the sourcecode from ntpq and exports a number
7129473Spjd *  of useful functions in a library that can be linked against applications
8129473Spjd *  that need to query the status of a running ntpd. The whole
9129473Spjd *  communcation is based on mode 6 packets.
10129473Spjd *
11129473Spjd * This header file can be used in applications that want to link against
12129473Spjd * libntpq.
13155174Spjd *
14129473Spjd ****************************************************************************/
15129473Spjd
16129473Spjd#include "ntp_net.h"
17129473Spjd
18129473Spjd/* general purpose buffer size */
19129473Spjd#define NTPQ_BUFLEN 2048
20129473Spjd
21129473Spjd/* max. number of associations */
22129473Spjd#ifndef MAXASSOC
23129473Spjd#define MAXASSOC    1024
24129473Spjd#endif
25129473Spjd
26129473Spjd/* general purpose max array size definition */
27129473Spjd#ifndef MAXLIST
28129473Spjd#define MAXLIST 64
29129473Spjd#endif
30129473Spjd
31129473Spjd#ifndef LENHOSTNAME
32129473Spjd#define LENHOSTNAME 256     /* host name is max. 256 characters long */
33129473Spjd#endif
34129473Spjd
35129473Spjd/* NTP Status codes */
36129473Spjd#define NTP_STATUS_INVALID      0
37223921Sae#define NTP_STATUS_FALSETICKER  1
38129473Spjd#define NTP_STATUS_EXCESS       2
39129473Spjd#define NTP_STATUS_OUTLIER      3
40131878Spjd#define NTP_STATUS_CANDIDATE    4
41129473Spjd#define NTP_STATUS_SELECTED     5
42129473Spjd#define NTP_STATUS_SYSPEER      6
43129473Spjd#define NTP_STATUS_PPSPEER      7
44219029Snetchild
45129473Spjd/* NTP association type identifier */
46151897Srwatson#define NTP_CLOCKTYPE_UNKNOWN   '-'
47129473Spjd#define NTP_CLOCKTYPE_BROADCAST 'b'
48131878Spjd#define NTP_CLOCKTYPE_LOCAL     'l'
49129473Spjd#define NTP_CLOCKTYPE_UNICAST   'u'
50129473Spjd#define NTP_CLOCKTYPE_MULTICAST 'm'
51129473Spjd
52129473Spjd/* Variable Sets */
53129473Spjd#define PEERVARS CTL_OP_READVAR
54129473Spjd#define CLOCKVARS CTL_OP_CLOCKVAR
55129473Spjd
56129473Spjd/* Variable list struct */
57131878Spjdstruct ntpq_varlist {
58131878Spjd	char *name;
59129473Spjd	char *value;
60129473Spjd};
61129473Spjd
62133318Sphk/* global variables used for holding snapshots of data */
63129473Spjd#ifndef LIBNTPQ_C
64129473Spjdextern char peervars[];
65131878Spjdextern int peervarlen;
66131878Spjdextern int peervar_assoc;
67131878Spjdextern char clockvars[];
68129473Spjdextern int clockvarlen;
69129473Spjdextern int clockvar_assoc;
70131878Spjdextern char sysvars[];
71227309Sedextern int sysvarlen;
72227309Sedextern char *ntpq_resultbuffer[];
73131878Spjdextern struct ntpq_varlist ntpq_varlist[MAXLIST];
74267992Shselasky#endif
75131878Spjd
76138623Spjd
77131878Spjd
78131878Spjd/*
79131878Spjd * Prototypes of exported libary functions
80131878Spjd */
81129473Spjd
82131878Spjd/* from libntpq.c */
83170289Sdwmaloneextern int ntpq_openhost(char *, int);
84131878Spjdextern int ntpq_closehost(void);
85131878Spjdextern int ntpq_queryhost(unsigned short VARSET, associd_t association,
86131878Spjd			  char *resultbuf, int maxlen);
87131878Spjdextern size_t ntpq_getvar(const char *resultbuf, size_t datalen,
88267992Shselasky			  const char *varname, char *varvalue,
89132095Spjd			  size_t maxlen);
90196837Smavextern int ntpq_stripquotes ( char *resultbuf, char *srcbuf, int datalen, int maxlen );
91267992Shselaskyextern int ntpq_queryhost_peervars(associd_t association, char *resultbuf, int maxlen);
92132095Spjdextern int ntpq_get_peervar( const char *varname, char *varvalue, int maxlen);
93133205Spjdextern size_t ntpq_read_sysvars(char *resultbuf, size_t maxsize);
94133205Spjdextern int ntpq_get_sysvars( void );
95133205Spjdextern int ntpq_read_associations ( unsigned short resultbuf[], int max_entries );
96131878Spjdextern int ntpq_get_assocs ( void );
97129473Spjdextern int ntpq_get_assoc_number ( associd_t associd );
98129473Spjdextern int ntpq_get_assoc_peervars( associd_t associd );
99129473Spjdextern int ntpq_get_assoc_clockvars( associd_t associd );
100129473Spjdextern int ntpq_get_assoc_allvars( associd_t associd  );
101129473Spjdextern int ntpq_get_assoc_clocktype(int assoc_index);
102129473Spjdextern int ntpq_read_assoc_peervars( associd_t associd, char *resultbuf, int maxsize );
103129473Spjdextern int ntpq_read_assoc_clockvars( associd_t associd, char *resultbuf, int maxsize );
104129473Spjd
105129473Spjd/* in libntpq_subs.c */
106129473Spjdextern int ntpq_dogetassoc(void);
107129473Spjdextern char ntpq_decodeaddrtype(sockaddr_u *sock);
108129473Spjdextern int ntpq_doquerylist(struct ntpq_varlist *, int, associd_t, int,
109129473Spjd			    u_short *, int *, const char **datap);
110129473Spjd