Commit 3d07b691 authored by Mahesh Bandewar's avatar Mahesh Bandewar Committed by Jakub Kicinski
Browse files

selftest/ptp: update ptp selftest to exercise the gettimex options



With the inclusion of commit c259acab ("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: default avatarMahesh Bandewar <maheshb@google.com>
Cc: Shuah Khan <shuah@kernel.org>
Acked-by: default avatarRichard Cochran <richardcochran@gmail.com>
Link: https://patch.msgid.link/20241003101506.769418-1-maheshb@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 2f651683
Loading
Loading
Loading
Loading
+57 −5
Original line number Diff line number Diff line
@@ -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;
				}
			}
		}