parent
a83fd1a167
commit
0c71bd4bc2
138
linuxptp-classthreshold.patch
Normal file
138
linuxptp-classthreshold.patch
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
Backported commit f774703cb1eee058a346aec3341fee0be329bd6d
|
||||||
|
Author: Karthikkumar V <kvaloor@altiostar.com>
|
||||||
|
Date: Fri Feb 26 06:54:07 2021 +0000
|
||||||
|
|
||||||
|
Clock Class Threshold Feature addition for PTP4L
|
||||||
|
|
||||||
|
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 <kvaloor@altiostar.com>
|
||||||
|
Signed-off-by: Ramana Reddy <rreddy@altiostar.com>
|
||||||
|
|
||||||
|
diff --git a/clock.c b/clock.c
|
||||||
|
index c1fcff6..d584748 100644
|
||||||
|
--- a/clock.c
|
||||||
|
+++ b/clock.c
|
||||||
|
@@ -114,6 +114,7 @@ struct clock {
|
||||||
|
int utc_offset;
|
||||||
|
int time_flags; /* grand master role */
|
||||||
|
int time_source; /* grand master role */
|
||||||
|
+ UInteger8 clock_class_threshold;
|
||||||
|
UInteger8 max_steps_removed;
|
||||||
|
enum servo_state servo_state;
|
||||||
|
enum timestamp_type timestamping;
|
||||||
|
@@ -978,6 +979,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, "clock_class_threshold");
|
||||||
|
|
||||||
|
/* Harmonize the twoStepFlag with the time_stamping option. */
|
||||||
|
if (config_harmonize_onestep(config)) {
|
||||||
|
@@ -1711,6 +1713,11 @@ UInteger8 clock_max_steps_removed(struct clock *c)
|
||||||
|
return c->max_steps_removed;
|
||||||
|
}
|
||||||
|
|
||||||
|
+UInteger8 clock_get_clock_class_threshold(struct clock *c)
|
||||||
|
+{
|
||||||
|
+ return c->clock_class_threshold;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
UInteger16 clock_steps_removed(struct clock *c)
|
||||||
|
{
|
||||||
|
return c->cur.stepsRemoved;
|
||||||
|
diff --git a/clock.h b/clock.h
|
||||||
|
index e7daf97..845d54f 100644
|
||||||
|
--- a/clock.h
|
||||||
|
+++ b/clock.h
|
||||||
|
@@ -289,6 +289,13 @@ int clock_slave_only(struct clock *c);
|
||||||
|
*/
|
||||||
|
UInteger8 clock_max_steps_removed(struct clock *c);
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * Obtain the clock class threshold field from a clock's default data set.
|
||||||
|
+ * @param c The clock instance.
|
||||||
|
+ * @return Configured clock class threshold value.
|
||||||
|
+ */
|
||||||
|
+UInteger8 clock_get_clock_class_threshold(struct clock *c);
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* Obtain the steps removed field from a clock's current data set.
|
||||||
|
* @param c The clock instance.
|
||||||
|
diff --git a/config.c b/config.c
|
||||||
|
index c3deddb..bf1049f 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),
|
||||||
|
diff --git a/configs/default.cfg b/configs/default.cfg
|
||||||
|
index 9604219..b2ffa94 100644
|
||||||
|
--- a/configs/default.cfg
|
||||||
|
+++ b/configs/default.cfg
|
||||||
|
@@ -60,6 +60,7 @@ verbose 0
|
||||||
|
summary_interval 0
|
||||||
|
kernel_leap 1
|
||||||
|
check_fup_sync 0
|
||||||
|
+clock_class_threshold 248
|
||||||
|
#
|
||||||
|
# Servo Options
|
||||||
|
#
|
||||||
|
diff --git a/ds.h b/ds.h
|
||||||
|
index 9d9c417..dff6d5e 100644
|
||||||
|
--- a/ds.h
|
||||||
|
+++ b/ds.h
|
||||||
|
@@ -87,6 +87,7 @@ struct parent_ds {
|
||||||
|
|
||||||
|
#define CURRENT_UTC_OFFSET 37 /* 1 Jan 2017 */
|
||||||
|
#define INTERNAL_OSCILLATOR 0xA0
|
||||||
|
+#define CLOCK_CLASS_THRESHOLD_DEFAULT 248
|
||||||
|
|
||||||
|
struct timePropertiesDS {
|
||||||
|
Integer16 currentUtcOffset;
|
||||||
|
diff --git a/port.c b/port.c
|
||||||
|
index 2bb974c..eb3b319 100644
|
||||||
|
--- a/port.c
|
||||||
|
+++ b/port.c
|
||||||
|
@@ -1870,6 +1870,14 @@ int process_announce(struct port *p, struct ptp_message *m)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (m->announce.grandmasterClockQuality.clockClass >
|
||||||
|
+ clock_get_clock_class_threshold(p->clock)) {
|
||||||
|
+ pl_err(60, "port %hu: Master clock quality received is "
|
||||||
|
+ "greater than configured, ignoring master!",
|
||||||
|
+ portnum(p));
|
||||||
|
+ return result;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
switch (p->state) {
|
||||||
|
case PS_INITIALIZING:
|
||||||
|
case PS_FAULTY:
|
||||||
|
diff --git a/ptp4l.8 b/ptp4l.8
|
||||||
|
index b04936a..ca76175 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.
|
@ -23,6 +23,8 @@ Source11: https://github.com/mlichvar/clknetsim/archive/%{clknetsim_ver}/clknets
|
|||||||
|
|
||||||
# don't repeat some log messages in multi-port configuration
|
# don't repeat some log messages in multi-port configuration
|
||||||
Patch1: linuxptp-logmsgs.patch
|
Patch1: linuxptp-logmsgs.patch
|
||||||
|
# add option to set clockClass threshold
|
||||||
|
Patch2: linuxptp-classthreshold.patch
|
||||||
# limit unicast message rate per address and grant duration
|
# limit unicast message rate per address and grant duration
|
||||||
Patch4: linuxptp-ucastrate.patch
|
Patch4: linuxptp-ucastrate.patch
|
||||||
# fix quoting in ptp4l man page
|
# fix quoting in ptp4l man page
|
||||||
@ -48,6 +50,7 @@ Supporting legacy APIs and other platforms is not a goal.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q -a 10 -a 11 -n %{name}-%{!?gitfullver:%{version}}%{?gitfullver}
|
%setup -q -a 10 -a 11 -n %{name}-%{!?gitfullver:%{version}}%{?gitfullver}
|
||||||
%patch1 -p1 -b .logmsgs
|
%patch1 -p1 -b .logmsgs
|
||||||
|
%patch2 -p1 -b .classthreshold
|
||||||
%patch4 -p1 -b .ucastrate
|
%patch4 -p1 -b .ucastrate
|
||||||
%patch7 -p1 -b .manfix
|
%patch7 -p1 -b .manfix
|
||||||
%patch8 -p1 -b .fclose
|
%patch8 -p1 -b .fclose
|
||||||
@ -75,7 +78,8 @@ echo 'OPTIONS="-a -r"' > $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/phc2sys
|
|||||||
echo '.so man8/ptp4l.8' > $RPM_BUILD_ROOT%{_mandir}/man5/ptp4l.conf.5
|
echo '.so man8/ptp4l.8' > $RPM_BUILD_ROOT%{_mandir}/man5/ptp4l.conf.5
|
||||||
echo '.so man8/timemaster.8' > $RPM_BUILD_ROOT%{_mandir}/man5/timemaster.conf.5
|
echo '.so man8/timemaster.8' > $RPM_BUILD_ROOT%{_mandir}/man5/timemaster.conf.5
|
||||||
|
|
||||||
rm -f configs/snmpd.conf
|
# Remove patch backup files and non-linuxptp configuration
|
||||||
|
find configs -type f ! -name '*.cfg' -delete
|
||||||
|
|
||||||
%check
|
%check
|
||||||
cd testsuite
|
cd testsuite
|
||||||
|
Loading…
Reference in New Issue
Block a user