On Wed, Jun 22, 2022 at 12:47:55PM +0530, SyncMonk Technologies wrote: > - adding organizational TLV support for interface rate > - delay asymmetry calculation for master and slave
So it could be split into two or three patches? > --- a/config.c > +++ b/config.c > @@ -240,6 +240,7 @@ struct config_item config_tab[] = { > GLOB_ITEM_ENU("clock_type", CLOCK_TYPE_ORDINARY, clock_type_enu), > GLOB_ITEM_ENU("dataset_comparison", DS_CMP_IEEE1588, dataset_comp_enu), > PORT_ITEM_INT("delayAsymmetry", 0, INT_MIN, INT_MAX), > + GLOB_ITEM_INT("interface_rate_tlv", 0, 0, 1), Why is it not a port-specific option? If you reject a suggestion, it's a good practice to explain your reasoning. > +uint64_t interface_bitperiod(struct interface *iface) > +{ > + /* 10^18 atto-sec per bit*/ > + uint64_t if_atto_sec_bit_period = 0x0DE0B6B3A7640000; This constant is ugly. I'd suggest to write it as 1000000000000000000. > + > + if (!iface->if_info.valid) { > + return 0; > + } > + > + if_atto_sec_bit_period /= iface->if_info.speed; > + if_atto_sec_bit_period /= 1000000; /* 1 Mb = 10^6 */ > + return if_atto_sec_bit_period; Wouldn't the function be easier to read if it was simplified to this? uint64_t interface_bitperiod(struct interface *iface) { if (!iface->if_info.valid) return 0; /* Megabits per second converted to attoseconds per bit */ return 1000000000000 / iface->if_info.speed; } > --- a/port_signaling.c > +++ b/port_signaling.c > @@ -103,10 +103,38 @@ static int process_interval_request(struct port *p, > return 0; > } > > +static int process_interface_rate(struct port *p, > + struct msg_interface_rate_tlv *r) Please align the parameters in the declaration. > +{ > + Integer64 delayAsymmetry; > + double nsDelay; > + > + if (clock_interface_rate_tlv (p->clock) && > + interface_ifinfo_valid(p->iface)) { And this too. > + /* Delay Asymmetry Calculation */ > + delayAsymmetry = r->interfaceBitPeriod - > + interface_bitperiod(p->iface); > + delayAsymmetry = delayAsymmetry/2; Inconsistent coding style (number of spaces around "=" and "/"). > + nsDelay = (double)delayAsymmetry / 1000000000; Casting can be avoided by dividing by 1.0e9. > + delayAsymmetry = > + (r->numberOfBitsAfterTimestamp - > + r->numberOfBitsBeforeTimestamp) * nsDelay; I find it confusing when a variable is updated in multiple steps like here, i.e. when it doesn't always contain a value according to its name. I'd suggest to merge it into a single assignment, or use more variables. > + if (delayAsymmetry != p->portAsymmetry) { > + /* Updating the nanosecond part */ This comment is confusing to me. > --- a/ptp4l.8 > +++ b/ptp4l.8 > @@ -705,6 +705,12 @@ the interval, the sample will be printed instead of the > statistics. The > messages are printed at the LOG_INFO level. > The default is 0 (1 second). > .TP > +.B interface_rate_tlv > +When master and slave instances are operating at different interface rate, > +delay asymmetry caused due to different interface rate needs to be > compensated. > +The master and slave exhanges their interface rate based on interface rate > TLV > +as per G.8275.2 Annex D. > +The default is 0 (does not support interface rate tlv). tlv -> TLV > @@ -256,6 +281,16 @@ static int unicast_service_reply(struct port *p, struct > ptp_message *dst, > if (err) { > goto out; > } > + > + if (clock_interface_rate_tlv (p->clock) && duration > 0 && > + clock_telecom_profile(p->clock) && > + interface_ifinfo_valid(p->iface)) { Please align the lines. -- Miroslav Lichvar _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel