Re: [Linuxptp-devel] [PATCH v1 5/5] Implement the COMMON_P2P delay mechanism.
PTP IEEE 1588 stack for Linux
Brought to you by:
rcochran
From: Kishen M. <kis...@in...> - 2023-12-01 00:53:06
|
Hi Richard, Firstly, thanks so much for your reviews and efforts to get this done. I'll just rehash a couple of points also raised by Andrew. On this change below: > +static int port_cmlds_initialize(struct port *p) > +{ > + struct config *cfg = clock_config(p->clock); > + struct subscribe_events_np sen = {0}; > + const int zero_datalen = 1; > + const UInteger8 hops = 0; > + > + p->cmlds_port = config_get_int(cfg, p->name, "cmlds_port"); > + p->cmlds_pmc = pmc_create(cfg, TRANS_UDS, > + config_get_string(cfg, p->name, "cmlds_client_address"), > + config_get_string(cfg, p->name, "cmlds_server_address"), > + hops, > + config_get_int(cfg, NULL, "domainNumber"), > + config_get_int(cfg, p->name, "transportSpecific") << 4, I haven't studied the flow here, but using the P2P_COMMON instance's transportSpecific and domainNumber above might cause the CMLDS server's port_ignore() to drop this message as the CMLDS ptp4l process would be configured with transportSpecific/domain=0x2/0. Perhaps just passing 0x2/0 above will fix things? This is assuming that there are no transportSpecific/domainNumber checks on the receive path for CMLDS events (which seemed to be the case looking at the code). On 11/30/23 11:28 AM, Richard Cochran wrote: ... >>> serviceMeasurementValid is implicit, because if you get a PUSH >>> notification, it is valid. >> >> Right, serviceMeasurementValid == true is implicit but >> serviceMeasurementValid == false is useful for the .port_id_valid / >> .pdr_missing logic to work. The timeout logic is disabled with >> P2P_COMMON. > > Right, so the next TODO is to enable FD_DELAY_TIMER for P2P_COMMON > mode and let it 1) renew the push subscription and 2) catch the case > when the push notification does not arrive on time. > Yes, in our series CMLDS queries were performed synchronously at the Pdelay request cadence. If serviceMeasurementValid=false then port->pdr_missing was incremented and immediately followed by a call to port_capable(). This was necessary as I recollect there was a related Avnu test case. If serviceMeasurementValid=true, then we set both peer_portid_valid and p->nrate.ratio_valid to true so that port_capable() could evaluate to true. |