ntptime.c revision 4e98c19603f13a48d194ec6f95e6c52339767d93
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* Copyright (c) David L. Mills 1993, 1994
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appears in all copies and that both the
* copyright notice and this permission notice appear in supporting
* documentation, and that the name University of Delaware not be used in
* advertising or publicity pertaining to distribution of the software
* without specific, written prior permission. The University of Delaware
* makes no representations about the suitability this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* Modification history kern_ntptime.c
*
* 24 Sep 94 David L. Mills
* Tightened code at exits.
*
* 24 Mar 94 David L. Mills
* Revised syscall interface to include new variables for PPS
* time discipline.
*
* 14 Feb 94 David L. Mills
* Added code for external clock
*
* 28 Nov 93 David L. Mills
* Revised frequency scaling to conform with adjusted parameters
*
* 17 Sep 93 David L. Mills
* Created file
*/
/*
* ntp_gettime(), ntp_adjtime() - precision time interface
*
* These routines consitute the Network Time Protocol (NTP) interfaces
* for user and daemon application programs. The ntp_gettime() routine
* provides the time, maximum error (synch distance) and estimated error
* (dispersion) to client user application programs. The ntp_adjtime()
* routine is used by the NTP daemon to adjust the system clock to an
* externally derived time. The time offset and related variables set by
* this routine are used by clock() to adjust the phase and
* frequency of the phase-lock loop which controls the system clock.
*/
/*
* ntp_gettime() - NTP user application interface
*/
int
{
struct ntptimeval ntv;
gethrestime(&tod);
if (datamodel == DATAMODEL_NATIVE) {
} else {
struct ntptimeval32 ntv32;
}
/*
* Status word error decode. If any of these conditions
* occur, an error is returned, instead of the status
* word. Most applications will care only about the fact
* the system clock may not be trusted, not about the
* details.
*
* Hardware or software error
*/
/*
* PPS signal lost when either time or frequency
* synchronization requested
*/
!(time_status & STA_PPSSIGNAL)) ||
/*
* PPS jitter exceeded when time synchronization
* requested
*/
/*
* PPS wander exceeded or calibration error when
* frequency synchronization requested
*/
(STA_PPSWANDER | STA_PPSERROR)))
return (TIME_ERROR);
return (time_state);
}
/*
* ntp_adjtime() - NTP daemon application interface
*/
int
{
int modes;
/*
* Update selected clock variables - only privileged users can
* change anything. Note that there is no error checking here on
* the assumption privileged users know what they're doing.
*/
if (modes & MOD_MAXERROR)
if (modes & MOD_ESTERROR)
if (modes & MOD_STATUS) {
time_status &= STA_RONLY;
}
if (modes & MOD_TIMECONST)
if (modes & MOD_OFFSET)
if (modes & MOD_FREQUENCY)
/*
* Retrieve all clock variables
*/
/*
* Status word error decode. See comments in
* ntp_gettime() routine.
*/
!(time_status & STA_PPSSIGNAL)) ||
(time_status & STA_PPSTIME &&
time_status & STA_PPSJITTER) ||
(time_status & STA_PPSFREQ &&
return (TIME_ERROR);
return (time_state);
}