On 22/04/2021 09:18, Luigi 'Comio' Mantellini wrote:
> With this patch we introduce the twoStepFlag evaluation at port level.
> 
> ---
>   config.c |  2 +-
>   port.c   | 35 ++++++++++++++++++++++++++++++++++-
>   ptp4l.8  |  9 ++++-----
>   3 files changed, 39 insertions(+), 7 deletions(-)
> 
> diff --git a/config.c b/config.c
> index 4472d3d..f0e1e07 100644
> --- a/config.c
> +++ b/config.c
> @@ -322,7 +322,7 @@ struct config_item config_tab[] = {
>       PORT_ITEM_INT("ts2phc.pin_index", 0, 0, INT_MAX),
>       GLOB_ITEM_INT("ts2phc.pulsewidth", 500000000, 1000000, 999000000),
>       PORT_ITEM_ENU("tsproc_mode", TSPROC_FILTER, tsproc_enu),
> -     GLOB_ITEM_INT("twoStepFlag", 1, 0, 1),
> +     PORT_ITEM_INT("twoStepFlag", 1, 0, 1),
>       GLOB_ITEM_INT("tx_timestamp_timeout", 1, 1, INT_MAX),
>       PORT_ITEM_INT("udp_ttl", 1, 1, 255),
>       PORT_ITEM_INT("udp6_scope", 0x0E, 0x00, 0x0F),
> diff --git a/port.c b/port.c
> index 10bb9e1..b700ff3 100644
> --- a/port.c
> +++ b/port.c
> @@ -3028,6 +3028,37 @@ err:
>       msg_put(msg);
>   }
>   
> +static enum timestamp_type port_harmonize_onestep(struct port *p, enum 
> timestamp_type timestamping, int twoStepFlag)
> +{
> +     switch (timestamping) {
> +     case TS_SOFTWARE:
> +     case TS_LEGACY_HW:
> +             if (!twoStepFlag) {
> +                     pr_err("%s: one step is only possible "
> +                            "with hardware time stamping", p->log_name);
> +                     return timestamping;
> +             }
> +             break;
> +     case TS_HARDWARE:
> +             if (!twoStepFlag) {
> +                     pr_debug("%s: upgrading to one step time stamping "
> +                              "in order to match the port.twoStepFlag", 
> p->log_name);
> +                     return TS_ONESTEP;
> +             }
> +             break;
> +     case TS_ONESTEP:
> +     case TS_P2P1STEP:
> +             if (twoStepFlag) {
> +                     pr_debug("%s: degrading to two step time stamping, "
> +                                  "in order to match the port.twoStepFlag", 
> p->log_name);
> +                     return TS_HARDWARE;
> +             }
> +             break;
> +     }
> +
> +     return timestamping;
> +}
> +

As user do configure the time_stamping, I think that changing of timestamping 
require a flag that permit it, or alternatively generate error.
I think that automatic probing of timestamping without proper configuration may 
confuse users.

We should allow time_stamping per port.

Just because I choose one step or two steps, does not guarantee I like the 
resulting timestamping.
In addition, the driver might not support the probed timestamping.

I do like probing. I just think it requires a flag that the user can decide to 
use it or not.

>   struct port *port_open(const char *phc_device,
>                      int phc_index,
>                      enum timestamp_type timestamping,
> @@ -3039,6 +3070,7 @@ struct port *port_open(const char *phc_device,
>       struct config *cfg = clock_config(clock);
>       struct port *p = malloc(sizeof(*p));
>       int i;
> +     int twoStepFlag;
>   
>       if (!p) {
>               return NULL;
> @@ -3134,7 +3166,8 @@ struct port *port_open(const char *phc_device,
>       p->tx_timestamp_offset <<= 16;
>       p->link_status = LINK_UP;
>       p->clock = clock;
> -     p->timestamping = timestamping;
> +     twoStepFlag = config_get_int(cfg, p->name, "twoStepFlag");
> +     p->timestamping = port_harmonize_onestep(p, timestamping, twoStepFlag);
>       p->portIdentity.clockIdentity = clock_identity(clock);
>       p->portIdentity.portNumber = number;
>       p->state = PS_INITIALIZING;
> diff --git a/ptp4l.8 b/ptp4l.8
> index fe9e150..bea4dae 100644
> --- a/ptp4l.8
> +++ b/ptp4l.8
> @@ -143,6 +143,10 @@ See UNICAST DISCOVERY OPTIONS, below.
>   .SH PORT OPTIONS
>   
>   .TP
> +.B twoStepFlag
> +Enable two-step mode for sync messages. One-step mode can be used only with
> +hardware time stamping.
> +The default is 1 (enabled).
>   .B delayAsymmetry
>   The time difference in nanoseconds of the transmit and receive
>   paths. This value should be positive when the server-to-client
> @@ -378,11 +382,6 @@ to the same subnet.
>   
>   .SH PROGRAM AND CLOCK OPTIONS
>   
> -.TP
> -.B twoStepFlag
> -Enable two-step mode for sync messages. One-step mode can be used only with
> -hardware time stamping.
> -The default is 1 (enabled).
>   .TP
>   .B clientOnly
>   The local clock is a client-only clock if enabled. The default is 0 
> (disabled).
> 

_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to