static char *RCSid
= "$Header: /f/osi/others/ntp/RCS/ntq.c,v 7.1 91/02/22 09:34:05 mrose Interim $";
* NTP query program - useful for debugging, Specific to OSI.
* Revision 7.1 91/02/22 09:34:05 mrose
* Revision 7.0 90/12/10 17:21:47 mrose
* *** empty log message ***
* Revision 1.1 90/08/14 10:14:25 jpo
int query_result (), query_error ();
void ros_adios (), ros_advise (), acs_adios (), acs_advise (),
while((opt
= getopt(argc
, argv
, "-s")) != EOF
)
sleeptime
= atoi (optarg
);
fprintf (stderr
, "Usage: %s [-s] host\n", myname
);
adios (NULLCP
, "Usage: %s [-s] host", myname
);
register struct SSAPref
*sf
;
register struct PSAPaddr
*pa
;
struct AcSAPconnect accs
;
register struct AcSAPconnect
*acc
= &accs
;
struct AcSAPindication acis
;
register struct AcSAPindication
*aci
= &acis
;
register struct AcSAPabort
*aca
= &aci
-> aci_abort
;
register struct PSAPctxlist
*pc
= &pcs
;
struct RoSAPindication rois
;
register struct RoSAPindication
*roi
= &rois
;
register struct RoSAPpreject
*rop
= &roi
-> roi_preject
;
if ((pa
= str2paddr (addr
)) == NULLPA
) {
advise ( NULLCP
, "Can't translate %s", addr
);
pep
[0] = build_bind_arg (pa
);
if ((ctx
= ode2oid (mycontext
)) == NULLOID
) {
"%s: unknown object descriptor", mycontext
);
if ((ctx
= oid_cpy (ctx
)) == NULLOID
) {
advise ( "memory", "out of");
if ((pci
= ode2oid (mypci
)) == NULLOID
) {
"%s: unknown object descriptor", mypci
);
if ((pci
= oid_cpy (pci
)) == NULLOID
) {
advise ( "memory", "out of");
pc
-> pc_ctx
[0].pc_id
= 1;
pc
-> pc_ctx
[0].pc_asn
= pci
;
pc
-> pc_ctx
[0].pc_atn
= NULLOID
;
if ((sf
= addr2ref (PLocalHostName ())) == NULL
) {
(void) bzero ((char *) sf
, sizeof *sf
);
if (AcAssocRequest (ctx
, NULLAEI
, NULLAEI
, NULLPA
, pa
,
0, ROS_MYREQUIRE
, SERIAL_NONE
, 0, sf
,
acs_adios (aca
, "A-ASSOCIATE.REQUEST");
if (acc
-> acc_result
!= ACS_ACCEPT
)
if (RoSetService (sd
, RoPService
, roi
) == NOTOK
)
ros_adios (rop
, "set RO/PS fails");
struct AcSAPconnect
*acc
;
if (acc
-> acc_ninfo
> 0) {
struct type_NTP_BindError
*binderr
;
if (decode_NTP_BindError (acc
-> acc_info
[0], 1,
if (binderr
-> supplementary
)
cp
= qb2str (binderr
-> supplementary
);
switch (binderr
-> reason
) {
case int_NTP_reason_refused
:
"connection refused: %s",
case int_NTP_reason_validation
:
"validation failure: %s",
case int_NTP_reason_version
:
case int_NTP_reason_badarg
:
"bad connect argument: %s",
case int_NTP_reason_congested
:
adios (NULLCP
, "Unknown reason (%d) %s",
free_NTP_BindError (binderr
);
adios (NULLCP
, "Connection failed: %s",
AcErrString (acc
-> acc_result
));
struct RoSAPindication rois
;
register struct RoSAPindication
*roi
= &rois
;
register struct RoSAPpreject
*rop
= &roi
-> roi_preject
;
switch (RyStub (sd
, table_NTP_Operations
, operation_NTP_query
,
RyGenID (sd
), NULLIP
, NULLCP
,
query_result
, query_error
, ROS_SYNC
, roi
)) {
if (ROS_FATAL (rop
-> rop_reason
))
ros_advise (rop
, "STUB");
case OK
: /* got a result/error response */
case DONE
: /* got RO-END? */
adios (NULLCP
, "got RO-END.INDICATION");
adios (NULLCP
, "unknown return from RyStub");
int query_result (sd
, id
, dummy
, result
, roi
)
register struct type_NTP_ClockInfoList
*result
;
struct RoSAPindication
*roi
;
struct type_NTP_ClockInfo
*clock
;
printf (" %4.4s %4.4s %5.5s %8.8s %8.8s %8.8s %s\n",
"Stratum", "Poll", "Reach", "Delay", "Offset", "Disp", "host");
for (; result
; result
= result
-> next
) {
clock
= result
-> ClockInfo
;
if (bit_test (clock
-> flags
, bit_NTP_flags_configured
))
if (bit_test (clock
-> flags
, bit_NTP_flags_sane
))
if (bit_test (clock
-> flags
, bit_NTP_flags_candidate
))
if (bit_test (clock
-> flags
, bit_NTP_flags_selected
))
if (bit_test (clock
-> flags
, bit_NTP_flags_inactive
))
printf ("%4d", clock
-> stratum
);
printf (" %4d", clock
-> timer
);
printf (" %03o", clock
-> reachability
);
printf (" %8d", clock
-> estdelay
);
printf (" %8d", clock
-> estoffset
);
printf (" %8d", clock
-> estdisp
);
p
= qb2str (clock
-> remoteAddress
);
struct type_NTP_ClockIdentifier
*ci
=
p
= qb2str(ci
-> un
.referenceClock
);
query_error (sd
, id
, error
, parameter
, roi
)
register struct type_IMISC_IA5List
*parameter
;
struct RoSAPindication
*roi
;
register struct RyError
*rye
;
if (error
== RY_REJECT
) {
advise (NULLCP
, "%s", RoErrString ((int) parameter
));
if (rye
= finderrbyerr (table_NTP_Errors
, error
))
advise (NULLCP
, "%s", rye
-> rye_name
);
advise (NULLCP
, "Error %d", error
);
static PE
build_bind_arg ()
struct type_NTP_BindArgument
*bindarg
;
bindarg
= (struct type_NTP_BindArgument
*)
calloc (1, sizeof *bindarg
);
pe_alloc (PE_CLASS_UNIV
, PE_FORM_PRIM
,
bit_on (bindarg
-> version
,
bit_NTP_version_version__1
);
bit_on (bindarg
-> version
,
bit_NTP_version_version__2
);
bindarg
-> mode
= (struct type_NTP_BindMode
*)
calloc (1, sizeof *bindarg
->mode
);
bindarg
-> mode
-> parm
=
if (encode_NTP_BindArgument (&pe
, 1, NULLINT
, NULLCP
,
else pe
-> pe_context
= 3;
free_NTP_BindArgument (bindarg
);
void ros_adios (rop
, event
)
register struct RoSAPpreject
*rop
;
void ros_advise (rop
, event
)
register struct RoSAPpreject
*rop
;
(void) sprintf (buffer
, "[%s] %*.*s", RoErrString (rop
-> rop_reason
),
rop
-> rop_cc
, rop
-> rop_cc
, rop
-> rop_data
);
(void) sprintf (buffer
, "[%s]", RoErrString (rop
-> rop_reason
));
advise (NULLCP
, "%s: %s", event
, buffer
);
void acs_adios (aca
, event
)
register struct AcSAPabort
*aca
;
void acs_advise (aca
, event
)
register struct AcSAPabort
*aca
;
(void) sprintf (buffer
, "[%s] %*.*s",
AcErrString (aca
-> aca_reason
),
aca
-> aca_cc
, aca
-> aca_cc
, aca
-> aca_data
);
(void) sprintf (buffer
, "[%s]", AcErrString (aca
-> aca_reason
));
advise (NULLCP
, "%s: %s (source %d)", event
, buffer
,
fprintf (stderr
, "%s: ", myname
);
(void) fputs (buffer
, stderr
);
(void) fputc ('\n', stderr
);
void ryr_advise (va_alist
)
void ryr_advise (what
, fmt
)