diff --git a/config.c b/config.c index f2a78d4..ad63bba 100644 --- a/config.c +++ b/config.c @@ -313,6 +313,12 @@ static enum parser_result parse_global_setting(const char *option, return r; *cfg->pi_offset_const = df; + } else if (!strcmp(option, "pi_f_offset_const")) { + r = get_ranged_double(value, &df, 0.0, DBL_MAX); + if (r != PARSED_OK) + return r; + *cfg->pi_f_offset_const = df; + } else if (!strcmp(option, "pi_max_frequency")) { r = get_ranged_int(value, &val, 0, INT_MAX); if (r != PARSED_OK) diff --git a/config.h b/config.h index d4a58b3..c5de3ff 100644 --- a/config.h +++ b/config.h @@ -76,6 +76,7 @@ struct config { double *pi_proportional_const; double *pi_integral_const; double *pi_offset_const; + double *pi_f_offset_const; int *pi_max_frequency; unsigned char *ptp_dst_mac; diff --git a/default.cfg b/default.cfg index f9007b1..54b0aae 100644 --- a/default.cfg +++ b/default.cfg @@ -41,6 +41,7 @@ kernel_leap 1 pi_proportional_const 0.0 pi_integral_const 0.0 pi_offset_const 0.0 +pi_f_offset_const 0.0000001 pi_max_frequency 900000000 clock_servo pi # diff --git a/gPTP.cfg b/gPTP.cfg index ed134ff..c4e0fab 100644 --- a/gPTP.cfg +++ b/gPTP.cfg @@ -40,6 +40,7 @@ kernel_leap 1 pi_proportional_const 0.0 pi_integral_const 0.0 pi_offset_const 0.0 +pi_f_offset_const 0.0000001 pi_max_frequency 900000000 clock_servo pi # diff --git a/ptp4l.8 b/ptp4l.8 index 43a8697..fb49b21 100644 --- a/ptp4l.8 +++ b/ptp4l.8 @@ -268,9 +268,15 @@ The default is 0.0. .B pi_offset_const The maximum offset the PI controller will correct by changing the clock frequency instead of stepping the clock. When set to 0.0, the controller will -never step the clock. +never step the clock except on start. The default is 0.0. .TP +.B pi_f_offset_const +The maximum offset the PI controller will correct by changing the clock +frequency instead of stepping the clock. This is only applied on the first +update. When set to 0.0, the controller won't step the clock on start. +The default is 0.0000001 (100 nanoseconds). +.TP .B pi_max_frequency The maximum allowed frequency adjustment of the clock in parts per billion (ppb). This is an additional limit to the maximum allowed by the hardware. When diff --git a/ptp4l.c b/ptp4l.c index 8ad58bf..1e0304e 100644 --- a/ptp4l.c +++ b/ptp4l.c @@ -96,6 +96,7 @@ static struct config cfg_settings = { .pi_proportional_const = &configured_pi_kp, .pi_integral_const = &configured_pi_ki, .pi_offset_const = &configured_pi_offset, + .pi_f_offset_const = &configured_pi_f_offset, .pi_max_frequency = &configured_pi_max_freq, .ptp_dst_mac = ptp_dst_mac,