Implemented code review comments. This code changes brings in the ability to program the acceptable clockClass threshold beyond which device will move to holdover/free-run. Default clockClass threshold is 248. Example Use-Case This is needed in the cases where T-SC/T-BC Slave might want to listen only on PRC clockCLass and anything beyond that might not be acceptible and would want to go to holdover (with SyncE backup or internal oscillator).
Signed-off-by: Karthikkumar V <kval...@altiostar.com> Signed-off-by: Ramana Reddy <rre...@altiostar.com> --- clock.c | 4 ++-- config.c | 2 +- configs/default.cfg | 2 +- port.c | 7 +++++-- ptp4l.8 | 5 +++++ 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/clock.c b/clock.c index 542f409..c40476f 100644 --- a/clock.c +++ b/clock.c @@ -969,7 +969,7 @@ struct clock *clock_create(enum clock_type type, struct config *config, c->default_dataset.localPriority = config_get_int(config, NULL, "G.8275.defaultDS.localPriority"); c->max_steps_removed = config_get_int(config, NULL,"maxStepsRemoved"); - c->clock_class_threshold = config_get_int(config, NULL, "clockClassThreshold"); + c->clock_class_threshold = config_get_int(config, NULL, "clock_class_threshold"); /* Harmonize the twoStepFlag with the time_stamping option. */ if (config_harmonize_onestep(config)) { @@ -1660,7 +1660,7 @@ UInteger8 clock_max_steps_removed(struct clock *c) UInteger8 clock_get_clock_class_threshold(struct clock *c) { - if(c != NULL){ + if (c != NULL) { return c->clock_class_threshold; } return CLOCK_CLASS_THRESHOLD_DEFAULT; /* Return Default Value */ diff --git a/config.c b/config.c index 41735d3..c840d98 100644 --- a/config.c +++ b/config.c @@ -231,6 +231,7 @@ struct config_item config_tab[] = { GLOB_ITEM_INT("clockAccuracy", 0xfe, 0, UINT8_MAX), GLOB_ITEM_INT("clockClass", 248, 0, UINT8_MAX), GLOB_ITEM_STR("clockIdentity", "000000.0000.000000"), + GLOB_ITEM_INT("clock_class_threshold", CLOCK_CLASS_THRESHOLD_DEFAULT, 6, CLOCK_CLASS_THRESHOLD_DEFAULT), GLOB_ITEM_ENU("clock_servo", CLOCK_SERVO_PI, clock_servo_enu), GLOB_ITEM_ENU("clock_type", CLOCK_TYPE_ORDINARY, clock_type_enu), GLOB_ITEM_ENU("dataset_comparison", DS_CMP_IEEE1588, dataset_comp_enu), @@ -332,7 +333,6 @@ struct config_item config_tab[] = { GLOB_ITEM_INT("utc_offset", CURRENT_UTC_OFFSET, 0, INT_MAX), GLOB_ITEM_INT("verbose", 0, 0, 1), GLOB_ITEM_INT("write_phase_mode", 0, 0, 1), - GLOB_ITEM_INT("clockClassThreshold", CLOCK_CLASS_THRESHOLD_DEFAULT, 6, CLOCK_CLASS_THRESHOLD_DEFAULT), }; static struct unicast_master_table *current_uc_mtab; diff --git a/configs/default.cfg b/configs/default.cfg index 473bbb9..e863239 100644 --- a/configs/default.cfg +++ b/configs/default.cfg @@ -29,7 +29,7 @@ logMinDelayReqInterval 0 logMinPdelayReqInterval 0 operLogPdelayReqInterval 0 announceReceiptTimeout 3 -clockClassThreshold 248 +clock_class_threshold 248 syncReceiptTimeout 0 delayAsymmetry 0 fault_reset_interval 4 diff --git a/port.c b/port.c index ae2a00e..024370f 100644 --- a/port.c +++ b/port.c @@ -1861,8 +1861,11 @@ int process_announce(struct port *p, struct ptp_message *m) return result; } - /* If the clock class is greater than clock_class_threshold , ignore this master */ - if(m->announce.grandmasterClockQuality.clockClass > clock_get_clock_class_threshold(p->clock)){ + if (m->announce.grandmasterClockQuality.clockClass > + clock_get_clock_class_threshold(p->clock)) { + pl_err(60, "%s: Master clock quality received is " + "greater than configured, ignoring master!", + p->log_name); return result; } diff --git a/ptp4l.8 b/ptp4l.8 index 260aae3..b13471b 100644 --- a/ptp4l.8 +++ b/ptp4l.8 @@ -455,6 +455,11 @@ message is greater than or equal to the value of maxStepsRemoved the Announce message is not considered in the operation of the BMCA. The default value is 255. .TP +.B clock_class_threshold +The maximum clock class value from master, acceptible to sub-ordinate +clock beyond which it moves out of lock state. +The default value is 248. +.TP .B domainNumber The domain attribute of the local clock. -- 1.8.3.1 _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel