With the inclusion of commit c259acab839e ("ptp/ioctl: support
MONOTONIC{,_RAW} timestamps for PTP_SYS_OFFSET_EXTENDED") clock_gettime()
now allows retrieval of pre/post timestamps for CLOCK_MONOTONIC and
CLOCK_MONOTONIC_RAW timebases along with the previously supported
CLOCK_REALTIME.

This patch adds a command line option 'y' to the testptp program to
choose one of the allowed timebases [realtime aka system, monotonic,
and monotonic-raw).

Signed-off-by: Mahesh Bandewar <mahe...@google.com>
Cc: Shuah Khan <sh...@kernel.org>
Cc: Richard Cochran <richardcoch...@gmail.com>
Cc: "David S. Miller" <da...@davemloft.net>
Cc: Jakub Kicinski <k...@kernel.org>
---
 tools/testing/selftests/ptp/testptp.c | 62 ++++++++++++++++++++++++---
 1 file changed, 57 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/ptp/testptp.c 
b/tools/testing/selftests/ptp/testptp.c
index 011252fe238c..58064151f2c8 100644
--- a/tools/testing/selftests/ptp/testptp.c
+++ b/tools/testing/selftests/ptp/testptp.c
@@ -146,6 +146,7 @@ static void usage(char *progname)
                " -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"
                " -X         get a ptp clock cross timestamp\n"
+               " -y val     pre/post tstamp timebase to use 
{realtime|monotonic|monotonic-raw}\n"
                " -z         test combinations of rising/falling external time 
stamp flags\n",
                progname, PTP_MAX_SAMPLES);
 }
@@ -189,6 +190,7 @@ int main(int argc, char *argv[])
        int seconds = 0;
        int settime = 0;
        int channel = -1;
+       clockid_t ext_clockid = CLOCK_REALTIME;
 
        int64_t t1, t2, tp;
        int64_t interval, offset;
@@ -198,7 +200,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:F:ghH:i:k:lL:n:o:p:P:sSt:T:w:x:Xz"))) {
+       while (EOF != (c = getopt(argc, argv, 
"cd:e:f:F:ghH:i:k:lL:n:o:p:P:sSt:T:w:x:Xy:z"))) {
                switch (c) {
                case 'c':
                        capabilities = 1;
@@ -278,6 +280,21 @@ int main(int argc, char *argv[])
                case 'X':
                        getcross = 1;
                        break;
+               case 'y':
+                       if (!strcasecmp(optarg, "realtime"))
+                               ext_clockid = CLOCK_REALTIME;
+                       else if (!strcasecmp(optarg, "monotonic"))
+                               ext_clockid = CLOCK_MONOTONIC;
+                       else if (!strcasecmp(optarg, "monotonic-raw"))
+                               ext_clockid = CLOCK_MONOTONIC_RAW;
+                       else {
+                               fprintf(stderr,
+                                       "type needs to be realtime, monotonic 
or monotonic-raw; was given %s\n",
+                                       optarg);
+                               return -1;
+                       }
+                       break;
+
                case 'z':
                        flagtest = 1;
                        break;
@@ -566,6 +583,7 @@ int main(int argc, char *argv[])
                }
 
                soe->n_samples = getextended;
+               soe->clockid = ext_clockid;
 
                if (ioctl(fd, PTP_SYS_OFFSET_EXTENDED, soe)) {
                        perror("PTP_SYS_OFFSET_EXTENDED");
@@ -574,12 +592,46 @@ int main(int argc, char *argv[])
                               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);
+                               switch (ext_clockid) {
+                               case CLOCK_REALTIME:
+                                       printf("sample #%2d: real time before: 
%lld.%09u\n",
+                                              i, soe->ts[i][0].sec,
+                                              soe->ts[i][0].nsec);
+                                       break;
+                               case CLOCK_MONOTONIC:
+                                       printf("sample #%2d: monotonic time 
before: %lld.%09u\n",
+                                              i, soe->ts[i][0].sec,
+                                              soe->ts[i][0].nsec);
+                                       break;
+                               case CLOCK_MONOTONIC_RAW:
+                                       printf("sample #%2d: monotonic-raw time 
before: %lld.%09u\n",
+                                              i, soe->ts[i][0].sec,
+                                              soe->ts[i][0].nsec);
+                                       break;
+                               default:
+                                       break;
+                               }
                                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);
+                               switch (ext_clockid) {
+                               case CLOCK_REALTIME:
+                                       printf("            real time after: 
%lld.%09u\n",
+                                              soe->ts[i][2].sec,
+                                              soe->ts[i][2].nsec);
+                                       break;
+                               case CLOCK_MONOTONIC:
+                                       printf("            monotonic time 
after: %lld.%09u\n",
+                                              soe->ts[i][2].sec,
+                                              soe->ts[i][2].nsec);
+                                       break;
+                               case CLOCK_MONOTONIC_RAW:
+                                       printf("            monotonic-raw time 
after: %lld.%09u\n",
+                                              soe->ts[i][2].sec,
+                                              soe->ts[i][2].nsec);
+                                       break;
+                               default:
+                                       break;
+                               }
                        }
                }
 
-- 
2.46.1.824.gd892dcdcdd-goog


Reply via email to