ntpd: without INITIAL_FREQ_ESTIMATION code, state variable is not needed too
function old new delta update_local_clock 917 872 -45 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
423c4c25d8
commit
2620d38714
@ -461,12 +461,7 @@ struct globals {
|
|||||||
#define G_precision_sec 0.002
|
#define G_precision_sec 0.002
|
||||||
uint8_t stratum;
|
uint8_t stratum;
|
||||||
|
|
||||||
#define STATE_NSET 0 /* initial state, "nothing is set" */
|
//uint8_t discipline_state; // doc calls it c.state
|
||||||
//#define STATE_FSET 1 /* frequency set from file */
|
|
||||||
//#define STATE_SPIK 2 /* spike detected */
|
|
||||||
//#define STATE_FREQ 3 /* initial frequency */
|
|
||||||
#define STATE_SYNC 4 /* clock synchronized (normal operation) */
|
|
||||||
uint8_t discipline_state; // doc calls it c.state
|
|
||||||
uint8_t poll_exp; // s.poll
|
uint8_t poll_exp; // s.poll
|
||||||
int polladj_count; // c.count
|
int polladj_count; // c.count
|
||||||
int FREQHOLD_cnt;
|
int FREQHOLD_cnt;
|
||||||
@ -1453,15 +1448,14 @@ select_and_cluster(void)
|
|||||||
* Local clock discipline and its helpers
|
* Local clock discipline and its helpers
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
set_new_values(int disc_state, double offset, double recv_time)
|
set_new_values(double offset, double recv_time)
|
||||||
{
|
{
|
||||||
/* Enter new state and set state variables. Note we use the time
|
/* Enter new state and set state variables. Note we use the time
|
||||||
* of the last clock filter sample, which must be earlier than
|
* of the last clock filter sample, which must be earlier than
|
||||||
* the current time.
|
* the current time.
|
||||||
*/
|
*/
|
||||||
VERB4 bb_error_msg("disc_state=%d last update offset=%f recv_time=%f",
|
VERB4 bb_error_msg("last update offset=%f recv_time=%f",
|
||||||
disc_state, offset, recv_time);
|
offset, recv_time);
|
||||||
G.discipline_state = disc_state;
|
|
||||||
G.last_update_offset = offset;
|
G.last_update_offset = offset;
|
||||||
G.last_update_recv_time = recv_time;
|
G.last_update_recv_time = recv_time;
|
||||||
}
|
}
|
||||||
@ -1550,9 +1544,16 @@ update_local_clock(peer_t *p)
|
|||||||
recv_time += offset;
|
recv_time += offset;
|
||||||
|
|
||||||
abs_offset = offset = 0;
|
abs_offset = offset = 0;
|
||||||
set_new_values(STATE_SYNC, offset, recv_time);
|
set_new_values(offset, recv_time);
|
||||||
} else { /* abs_offset <= STEP_THRESHOLD */
|
} else { /* abs_offset <= STEP_THRESHOLD */
|
||||||
|
|
||||||
|
if (option_mask32 & OPT_q) {
|
||||||
|
/* We were only asked to set time once.
|
||||||
|
* The clock is precise enough, no need to step.
|
||||||
|
*/
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
/* The ratio is calculated before jitter is updated to make
|
/* The ratio is calculated before jitter is updated to make
|
||||||
* poll adjust code more sensitive to large offsets.
|
* poll adjust code more sensitive to large offsets.
|
||||||
*/
|
*/
|
||||||
@ -1567,46 +1568,31 @@ update_local_clock(peer_t *p)
|
|||||||
if (G.discipline_jitter < G_precision_sec)
|
if (G.discipline_jitter < G_precision_sec)
|
||||||
G.discipline_jitter = G_precision_sec;
|
G.discipline_jitter = G_precision_sec;
|
||||||
|
|
||||||
switch (G.discipline_state) {
|
|
||||||
case STATE_NSET:
|
|
||||||
if (option_mask32 & OPT_q) {
|
|
||||||
/* We were only asked to set time once.
|
|
||||||
* The clock is precise enough, no need to step.
|
|
||||||
*/
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
set_new_values(STATE_SYNC, offset, recv_time);
|
|
||||||
VERB4 bb_simple_error_msg("transitioning to FREQ, datapoint ignored");
|
|
||||||
return 0; /* "leave poll interval as is" */
|
|
||||||
|
|
||||||
default:
|
|
||||||
#if !USING_KERNEL_PLL_LOOP
|
#if !USING_KERNEL_PLL_LOOP
|
||||||
/* Compute freq_drift due to PLL and FLL contributions.
|
/* Compute freq_drift due to PLL and FLL contributions.
|
||||||
*
|
*
|
||||||
* The FLL and PLL frequency gain constants
|
* The FLL and PLL frequency gain constants
|
||||||
* depend on the poll interval and Allan
|
* depend on the poll interval and Allan
|
||||||
* intercept. The FLL is not used below one-half
|
* intercept. The FLL is not used below one-half
|
||||||
* the Allan intercept. Above that the loop gain
|
* the Allan intercept. Above that the loop gain
|
||||||
* increases in steps to 1 / AVG.
|
* increases in steps to 1 / AVG.
|
||||||
*/
|
*/
|
||||||
if ((1 << G.poll_exp) > ALLAN / 2) {
|
if ((1 << G.poll_exp) > ALLAN / 2) {
|
||||||
etemp = FLL - G.poll_exp;
|
etemp = FLL - G.poll_exp;
|
||||||
if (etemp < AVG)
|
if (etemp < AVG)
|
||||||
etemp = AVG;
|
etemp = AVG;
|
||||||
freq_drift += (offset - G.last_update_offset) / (MAXD(since_last_update, ALLAN) * etemp);
|
freq_drift += (offset - G.last_update_offset) / (MAXD(since_last_update, ALLAN) * etemp);
|
||||||
}
|
|
||||||
/* For the PLL the integration interval
|
|
||||||
* (numerator) is the minimum of the update
|
|
||||||
* interval and poll interval. This allows
|
|
||||||
* oversampling, but not undersampling.
|
|
||||||
*/
|
|
||||||
etemp = MIND(since_last_update, (1 << G.poll_exp));
|
|
||||||
dtemp = (4 * PLL) << G.poll_exp;
|
|
||||||
freq_drift += offset * etemp / SQUARE(dtemp);
|
|
||||||
#endif
|
|
||||||
set_new_values(STATE_SYNC, offset, recv_time);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
/* For the PLL the integration interval
|
||||||
|
* (numerator) is the minimum of the update
|
||||||
|
* interval and poll interval. This allows
|
||||||
|
* oversampling, but not undersampling.
|
||||||
|
*/
|
||||||
|
etemp = MIND(since_last_update, (1 << G.poll_exp));
|
||||||
|
dtemp = (4 * PLL) << G.poll_exp;
|
||||||
|
freq_drift += offset * etemp / SQUARE(dtemp);
|
||||||
|
#endif
|
||||||
|
set_new_values(offset, recv_time);
|
||||||
if (G.stratum != p->lastpkt_stratum + 1) {
|
if (G.stratum != p->lastpkt_stratum + 1) {
|
||||||
G.stratum = p->lastpkt_stratum + 1;
|
G.stratum = p->lastpkt_stratum + 1;
|
||||||
run_script("stratum", offset);
|
run_script("stratum", offset);
|
||||||
@ -1625,9 +1611,7 @@ update_local_clock(peer_t *p)
|
|||||||
G.rootdisp = p->lastpkt_rootdisp + dtemp;
|
G.rootdisp = p->lastpkt_rootdisp + dtemp;
|
||||||
VERB4 bb_error_msg("updating leap/refid/reftime/rootdisp from peer %s", p->p_dotted);
|
VERB4 bb_error_msg("updating leap/refid/reftime/rootdisp from peer %s", p->p_dotted);
|
||||||
|
|
||||||
/* We are in STATE_SYNC now, but did not do adjtimex yet.
|
/* By this time, freq_drift and offset are set
|
||||||
* (Any other state does not reach this, they all return earlier)
|
|
||||||
* By this time, freq_drift and offset are set
|
|
||||||
* to values suitable for adjtimex.
|
* to values suitable for adjtimex.
|
||||||
*/
|
*/
|
||||||
#if !USING_KERNEL_PLL_LOOP
|
#if !USING_KERNEL_PLL_LOOP
|
||||||
|
Loading…
x
Reference in New Issue
Block a user