Commit 2f5b29aa authored by Jean-Claude BAU's avatar Jean-Claude BAU

[BUG: 2] ptpdump wrongly shows Announce Msg parameters

- Change the Quality structure to make it compliant with the standard
- Fix network to host conversion to display offsetScaledLogVariance
parent 9be8a71d
......@@ -107,10 +107,10 @@ typedef struct PortAdress { /* page 13 (33) */
Octet *adressField;
} PortAdress;
typedef struct ClockQuality { /* page 14 (34) -- int because of lib/config.c */
int clockClass;
int clockAccuracy;
int offsetScaledLogVariance;
typedef struct ClockQuality { /* page 14 (34) */
UInteger8 clockClass;
Enumeration8 clockAccuracy;
UInteger16 offsetScaledLogVariance;
} ClockQuality;
struct TLV { /* page 14 (34) -- never used */
......
......@@ -16,7 +16,9 @@
*/
struct pp_runtime_opts {
uint32_t updated_fields_mask;
ClockQuality clock_quality;
int clock_quality_clockClass; // ClockQuality.clockClass
int clock_quality_clockAccuracy; // ClockQuality.clockAccuracy
int clock_quality_offsetScaledLogVariance; // ClockQuality.offsetScaledLogVariance
Integer32 ttl;
int flags; /* see below */
Integer16 ap, ai;
......
......@@ -364,11 +364,11 @@ static struct pp_argline pp_global_arglines[] = {
PP_MIN_DELAY_COEFFICIENT_AS_RELDIFF,PP_MAX_DELAY_COEFFICIENT_AS_RELDIFF),
INST_OPTION_DOUBLE_RANGE("delayCoefficient", ARG_DOUBLE, NULL,cfg.delayCoefficient,
PP_MIN_DELAY_COEFFICIENT_AS_DOUBLE,PP_MAX_DELAY_COEFFICIENT_AS_DOUBLE),
RT_OPTION_INT_RANGE("clock-class", ARG_INT, NULL, clock_quality.clockClass,
RT_OPTION_INT_RANGE("clock-class", ARG_INT, NULL, clock_quality_clockClass,
PP_MIN_CLOCK_CLASS,PP_MAX_CLOCK_CLASS),
RT_OPTION_INT_RANGE("clock-accuracy", ARG_INT, NULL,clock_quality.clockAccuracy,
RT_OPTION_INT_RANGE("clock-accuracy", ARG_INT, NULL,clock_quality_clockAccuracy,
PP_MIN_CLOCK_ACCURACY,PP_MAX_CLOCK_ACCURACY),
RT_OPTION_INT_RANGE("clock-allan-variance", ARG_INT, NULL,clock_quality.offsetScaledLogVariance,
RT_OPTION_INT_RANGE("clock-allan-variance", ARG_INT, NULL,clock_quality_offsetScaledLogVariance,
PP_MIN_CLOCK_VARIANCE,PP_MAX_CLOCK_VARIANCE),
RT_OPTION_INT_RANGE("domain-number", ARG_INT, NULL, domainNumber,
PP_MIN_DOMAIN_NUMBER,PP_MAX_DOMAIN_NUMBER),
......
......@@ -1320,7 +1320,7 @@ static void bmc_update_clock_quality(struct pp_globals *ppg)
{
char *pp_diag_msg;
struct pp_runtime_opts *rt_opts = ppg->rt_opts;
int rt_opts_clock_quality_clockClass=rt_opts->clock_quality.clockClass;
int rt_opts_clock_quality_clockClass=rt_opts->clock_quality_clockClass;
int defaultDS_clock_quality_clockClass=ppg->defaultDS->clockQuality.clockClass;
timing_mode_state_t timing_mode_state;
......
......@@ -12,11 +12,9 @@
* need to change some values in there.
*/
struct pp_runtime_opts __pp_default_rt_opts = {
.clock_quality = {
.clockClass = PP_CLASS_DEFAULT,
.clockAccuracy = PP_ACCURACY_DEFAULT,
.offsetScaledLogVariance = PP_VARIANCE_DEFAULT,
},
.clock_quality_clockClass = PP_CLASS_DEFAULT,
.clock_quality_clockAccuracy = PP_ACCURACY_DEFAULT,
.clock_quality_offsetScaledLogVariance = PP_VARIANCE_DEFAULT,
.flags = PP_DEFAULT_FLAGS,
.ap = PP_DEFAULT_AP,
.ai = PP_DEFAULT_AI,
......@@ -89,8 +87,10 @@ int pp_init_globals(struct pp_globals *ppg, struct pp_runtime_opts *pp_rt_opts)
rt_opts = ppg->rt_opts;
memcpy(&def->clockQuality, &rt_opts->clock_quality,
sizeof(ClockQuality));
// Copy clock quality
def->clockQuality.clockClass=rt_opts->clock_quality_clockClass;
def->clockQuality.clockAccuracy=rt_opts->clock_quality_clockAccuracy;
def->clockQuality.offsetScaledLogVariance=rt_opts->clock_quality_offsetScaledLogVariance;
/* Clause 17.6.5.3 : Clause 9.2.2 shall not be in effect. If implemented, defaultDS.slaveOnly should be FALSE, and
* portDS.masterOnly should be FALSE on all PTP Ports of the PTP Instance.
......@@ -127,7 +127,7 @@ int pp_init_globals(struct pp_globals *ppg, struct pp_runtime_opts *pp_rt_opts)
}
if ( is_slaveOnly(def) ) {
/* Configured clockClass must be also changed to avoid to be set by BMCA bmc_update_clock_quality() */
rt_opts->clock_quality.clockClass =
rt_opts->clock_quality_clockClass =
def->clockQuality.clockClass = PP_CLASS_SLAVE_ONLY;
pp_printf("Slave Only, clock class set to %d\n", def->clockQuality.clockClass);
}
......@@ -167,7 +167,7 @@ int pp_init_globals(struct pp_globals *ppg, struct pp_runtime_opts *pp_rt_opts)
if ( def->clockQuality.clockClass < 128 && isSlavePresent) {
/* clockClass cannot be < 128 if a port is configured as slave */
/* Configured clockClass must be also changed to avoid to be set by BMCA bmc_update_clock_quality() */
rt_opts->clock_quality.clockClass =
rt_opts->clock_quality_clockClass =
def->clockQuality.clockClass=PP_CLASS_DEFAULT;
pp_printf("PPSi: GM clock set but slave present. Clock class set to %d\n", def->clockQuality.clockClass);
}
......
......@@ -113,8 +113,8 @@ static void dump_1stamp(char *prefix, char *s, struct stamp *t)
static void dump_1quality(char *prefix, char *s, ClockQuality *q)
{
printf("%s%s%02x-%02x-%04x\n", prefix, s, q->clockClass,
q->clockAccuracy, q->offsetScaledLogVariance);
printf("%s%s%02x-%02x-%04x\n", prefix, s, (unsigned int) q->clockClass,
(unsigned int) q->clockAccuracy, (unsigned int) q->offsetScaledLogVariance);
}
static void dump_1clockid(char *prefix, char *s, ClockIdentity i)
......@@ -135,10 +135,15 @@ static void dump_1port(char *prefix, char *s, unsigned char *p)
/* Helpers for each message types */
static void dump_msg_announce(char *prefix, struct ptp_announce *p)
{
ClockQuality grandmasterClockQuality;
memcpy( &grandmasterClockQuality,&p->grandmasterClockQuality, sizeof(ClockQuality));
grandmasterClockQuality.offsetScaledLogVariance=ntohs(grandmasterClockQuality.offsetScaledLogVariance);
dump_1stamp(prefix, "MSG-ANNOUNCE: stamp ",
&p->originTimestamp);
dump_1quality(prefix, "MSG-ANNOUNCE: grandmaster-quality ",
&p->grandmasterClockQuality);
&grandmasterClockQuality);
printf("%sMSG-ANNOUNCE: grandmaster-prio %i %i\n", prefix,
p->grandmasterPriority1, p->grandmasterPriority2);
dump_1clockid(prefix, "MSG-ANNOUNCE: grandmaster-id ",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment