Re: [PATCH net 1/2] selftests/ptp: Add -x option for testing PTP_SYS_OFFSET_EXTENDED

From: Horatiu Vultur
Date: Mon Jun 19 2023 - 05:39:27 EST


The 06/16/2023 23:48, Alex Maftei wrote:

Hi Alex,

As I can see you will need to send another patch, I have just a small
comment bellow.


> The -x option (where 'x' stands for eXtended) takes an argument which
> represents the number of samples to request from the PTP device.
> The help message will display the maximum number of samples allowed.
> Providing an invalid argument will also display the maximum number of
> samples allowed.
>
> Signed-off-by: Alex Maftei <alex.maftei@xxxxxxx>
> ---
> tools/testing/selftests/ptp/testptp.c | 42 +++++++++++++++++++++++++--
> 1 file changed, 40 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/ptp/testptp.c b/tools/testing/selftests/ptp/testptp.c
> index cfa9562f3cd8..2a99973ffc1b 100644
> --- a/tools/testing/selftests/ptp/testptp.c
> +++ b/tools/testing/selftests/ptp/testptp.c
> @@ -142,8 +142,9 @@ static void usage(char *progname)
> " -S set the system time from the ptp clock time\n"
> " -t val shift the ptp clock time by 'val' seconds\n"
> " -T val set the ptp clock time to 'val' seconds\n"
> + " -x val get an extended ptp clock time with the desired number of samples (up to %d)\n"
> " -z test combinations of rising/falling external time stamp flags\n",
> - progname);
> + progname, PTP_MAX_SAMPLES);
> }
>
> int main(int argc, char *argv[])
> @@ -157,6 +158,7 @@ int main(int argc, char *argv[])
> struct timex tx;
> struct ptp_clock_time *pct;
> struct ptp_sys_offset *sysoff;
> + struct ptp_sys_offset_extended *soe;
>
> char *progname;
> unsigned int i;
> @@ -174,6 +176,7 @@ int main(int argc, char *argv[])
> int index = 0;
> int list_pins = 0;
> int pct_offset = 0;
> + int getextended = 0;
> int n_samples = 0;
> int pin_index = -1, pin_func;
> int pps = -1;
> @@ -188,7 +191,7 @@ int main(int argc, char *argv[])
>
> progname = strrchr(argv[0], '/');
> progname = progname ? 1+progname : argv[0];
> - while (EOF != (c = getopt(argc, argv, "cd:e:f:ghH:i:k:lL:n:p:P:sSt:T:w:z"))) {
> + while (EOF != (c = getopt(argc, argv, "cd:e:f:ghH:i:k:lL:n:p:P:sSt:T:w:x:Xz"))) {

The 'X' needs to be part of the next patch, as you introduce here only 'x'.

> switch (c) {
> case 'c':
> capabilities = 1;
> @@ -250,6 +253,13 @@ int main(int argc, char *argv[])
> case 'w':
> pulsewidth = atoi(optarg);
> break;
> + case 'x':
> + getextended = atoi(optarg);
> + if (getextended < 1 || getextended > PTP_MAX_SAMPLES) {
> + fprintf(stderr, "number of extended timestamp samples must be between 1 and %d; was asked for %d\n", PTP_MAX_SAMPLES, getextended);
> + return -1;
> + }
> + break;
> case 'z':
> flagtest = 1;
> break;
> @@ -516,6 +526,34 @@ int main(int argc, char *argv[])
> free(sysoff);
> }
>
> + if (getextended) {
> + soe = calloc(1, sizeof(*soe));
> + if (!soe) {
> + perror("calloc");
> + return -1;
> + }
> +
> + soe->n_samples = getextended;
> +
> + if (ioctl(fd, PTP_SYS_OFFSET_EXTENDED, soe))
> + perror("PTP_SYS_OFFSET_EXTENDED");
> + else {
> + printf("extended timestamp request returned %d samples\n",
> + getextended);
> +
> + for (i = 0; i < getextended; i++) {
> + printf("sample #%2d: system time before: %lld.%09u\n",
> + i, soe->ts[i][0].sec, soe->ts[i][0].nsec);
> + printf(" phc time: %lld.%09u\n",
> + soe->ts[i][1].sec, soe->ts[i][1].nsec);
> + printf(" system time after: %lld.%09u\n",
> + soe->ts[i][2].sec, soe->ts[i][2].nsec);
> + }
> + }
> +
> + free(soe);
> + }
> +
> close(fd);
> return 0;
> }
> --
> 2.28.0
>
>

--
/Horatiu