> -----Original Message-----
> From: Anders Selhammer [mailto:anders.selham...@est.tech]
> Sent: Wednesday, September 12, 2018 3:07 AM
> To: linuxptp-devel@lists.sourceforge.net
> Subject: [Linuxptp-devel] [PATCH 1/1] Add possibility to set clockIdentity
> 
> Currently the clockIdentity is generated from the mac address of the first
> interface/port in config file. This patch add the possibility to set it in
> config file.
> The reason is if the stack is restarted with a different set of ports, it
> may be circumstances when clockIdentity needs to be equal as before
> restart even if the port setup is different.
> 
> Signed-off-by: Anders Selhammer <anders.selham...@est.tech>

Man page updates? And it should probably make sure that if the clock identify 
is all 0s we will autogenerate it.

Thanks,
Jake

> ---
>  clock.c  | 16 +++++++++++++---
>  config.c |  1 +
>  util.c   | 15 +++++++++++++++
>  util.h   |  9 +++++++++
>  4 files changed, 38 insertions(+), 3 deletions(-)
> 
> diff --git a/clock.c b/clock.c
> index faf2dea..b87be5d 100644
> --- a/clock.c
> +++ b/clock.c
> @@ -986,9 +986,19 @@ struct clock *clock_create(enum clock_type type, struct
> config *config,
>               pr_info("selected /dev/ptp%d as PTP clock", phc_index);
>       }
> 
> -     if (generate_clock_identity(&c->dds.clockIdentity, iface->name)) {
> -             pr_err("failed to generate a clock identity");
> -             return NULL;
> +     if (strcmp(config_get_string(config, NULL, "clockIdentity"),
> +                "000000.0000.000000") == 0) {
> +             if (generate_clock_identity(&c->dds.clockIdentity,
> +                                         iface->name)) {
> +                     pr_err("failed to generate a clock identity");
> +                     return NULL;
> +             }
> +     } else {
> +             if (str2cid(config_get_string(config, NULL, "clockIdentity"),
> +                                           &c->dds.clockIdentity)) {
> +                     pr_err("failed to set clock identity");
> +                     return NULL;
> +             }
>       }
> 
>       /* Configure the UDS. */
> diff --git a/config.c b/config.c
> index 7914ba4..242c7d1 100644
> --- a/config.c
> +++ b/config.c
> @@ -195,6 +195,7 @@ struct config_item config_tab[] = {
>       GLOB_ITEM_INT("check_fup_sync", 0, 0, 1),
>       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_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/util.c b/util.c
> index 73fb37e..c617510 100644
> --- a/util.c
> +++ b/util.c
> @@ -218,6 +218,21 @@ int str2mac(const char *s, unsigned char mac[MAC_LEN])
>       return 0;
>  }
> 
> +int str2cid(const char *s, struct ClockIdentity *result)
> +{
> +     struct ClockIdentity cid;
> +     unsigned char *ptr = cid.id;
> +     int c;
> +     c = sscanf(s, "
> %02hhx%02hhx%02hhx.%02hhx%02hhx.%02hhx%02hhx%02hhx",
> +                &ptr[0], &ptr[1], &ptr[2], &ptr[3],
> +                &ptr[4], &ptr[5], &ptr[6], &ptr[7]);
> +     if (c == 8) {
> +             *result = cid;
> +             return 0;
> +     }
> +     return -1;
> +}
> +
>  int str2pid(const char *s, struct PortIdentity *result)
>  {
>       struct PortIdentity pid;
> diff --git a/util.h b/util.h
> index 1ab1b3f..39d602e 100644
> --- a/util.h
> +++ b/util.h
> @@ -134,6 +134,15 @@ int str2addr(enum transport_type type, const char *s,
> struct address *addr);
>  int str2mac(const char *s, unsigned char mac[MAC_LEN]);
> 
>  /**
> + * Scan a string containing a clock identity and convert it into binary form.
> + *
> + * @param s       String in human readable form.
> + * @param result  Pointer to a buffer to hold the result.
> + * @return Zero on success, or -1 if the string is incorrectly formatted.
> + */
> +int str2cid(const char *s, struct ClockIdentity *result);
> +
> +/**
>   * Scan a string containing a port identity and convert it into binary form.
>   *
>   * @param s       String in human readable form.
> --
> 1.8.3.1
> 
> 
> 
> _______________________________________________
> Linuxptp-devel mailing list
> Linuxptp-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linuxptp-devel


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

Reply via email to