This patch add a method into testptp.c to measure the time offset
between phc and system clock through the ioctl PTP_SYS_OFFSET.
Signed-off-by: Dong Zhu <redacted>
---
Documentation/ptp/testptp.c | 40 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 38 insertions(+), 2 deletions(-)
@@ -112,6 +112,7 @@ static void usage(char *progname)" -f val adjust the ptp clock frequency by 'val' ppb\n"" -g get the ptp clock time\n"" -h prints this message\n"+" -k val measure the time offset between PHC and system clock\n"" -p val enable output with a period of 'val' nanoseconds\n"" -P val enable or disable (val=1|0) the system clock PPS\n"" -s set the ptp clock time from the system time\n"
@@ -133,8 +134,12 @@ int main(int argc, char *argv[])structitimerspectimeout;structsigeventsigevent;+structptp_clock_time*pct;+structptp_sys_offset*sysoff;++char*progname;-intc,cnt,fd;+inti,c,cnt,fd;char*device=DEVICE;clockid_tclkid;
@@ -144,6 +149,8 @@ int main(int argc, char *argv[])intextts=0;intgettime=0;intoneshot=0;+intoffset=0;+intn_samples=0;intperiodic=0;intperout=-1;intpps=-1;
@@ -151,7 +158,7 @@ int main(int argc, char *argv[])progname=strrchr(argv[0],'/');progname=progname?1+progname:argv[0];-while(EOF!=(c=getopt(argc,argv,"a:A:cd:e:f:ghp:P:sSt:v"))){+while(EOF!=(c=getopt(argc,argv,"a:A:cd:e:f:ghk:p:P:sSt:v"))){switch(c){case'a':oneshot=atoi(optarg);
@@ -174,6 +181,10 @@ int main(int argc, char *argv[])case'g':gettime=1;break;+case'k':+offset=1;+n_samples=atoi(optarg);+break;case'p':perout=atoi(optarg);break;
@@ -376,6 +387,31 @@ int main(int argc, char *argv[])}}+if(offset){+sysoff=calloc(1,sizeof(*sysoff));+if(!sysoff){+perror("calloc");+return-1;+}+sysoff->n_samples=n_samples;++if(ioctl(fd,PTP_SYS_OFFSET,sysoff))+perror("PTP_SYS_OFFSET");+else+puts("time offset between PHC and+systemclockrequestokay");++pct=&sysoff->ts[0];+for(i=0;i<sysoff->n_samples;i++,pct++){+printf("system time: %ld.%ld\n",pct->sec,pct->nsec);+pct++;+printf("phc time: %ld.%ld\n\n",pct->sec,pct->nsec);+}+printf("system time: %ld.%ld\n",pct->sec,pct->nsec);++free(sysoff);+}+close(fd);return0;}
From: Richard Cochran <richardcochran@gmail.com> Date: 2013-09-14 14:32:10
On Sat, Sep 14, 2013 at 04:03:06PM +0800, Dong Zhu wrote:
This patch add a method into testptp.c to measure the time offset
between phc and system clock through the ioctl PTP_SYS_OFFSET.
This is a nice addition to the testptp program. I do have a few
comments, below.
First off, the subject line should mention testptp. How about this?
[PATCH] ptp: add the PTP_SYS_OFFSET ioctl to the testptp program
@@ -112,6 +112,7 @@ static void usage(char *progname)" -f val adjust the ptp clock frequency by 'val' ppb\n"" -g get the ptp clock time\n"" -h prints this message\n"+" -k val measure the time offset between PHC and system clock\n"
The help message should tell the user what 'val' is.
quoted hunk
" -p val enable output with a period of 'val' nanoseconds\n"
" -P val enable or disable (val=1|0) the system clock PPS\n"
" -s set the ptp clock time from the system time\n"
@@ -133,8 +134,12 @@ int main(int argc, char *argv[]) struct itimerspec timeout; struct sigevent sigevent;+ struct ptp_clock_time *pct;+ struct ptp_sys_offset *sysoff;++ char *progname;- int c, cnt, fd;+ int i, c, cnt, fd; char *device = DEVICE; clockid_t clkid;
@@ -144,6 +149,8 @@ int main(int argc, char *argv[]) int extts = 0; int gettime = 0; int oneshot = 0;+ int offset = 0;+ int n_samples = 0; int periodic = 0; int perout = -1; int pps = -1;
On Sat, Sep 14, 2013 at 04:31:46PM +0200, Richard Cochran wrote:
On Sat, Sep 14, 2013 at 04:03:06PM +0800, Dong Zhu wrote:
quoted
This patch add a method into testptp.c to measure the time offset
between phc and system clock through the ioctl PTP_SYS_OFFSET.
This is a nice addition to the testptp program. I do have a few
comments, below.
Thanks very much for your comments, I have modified the patch as below,
Cuold you have a look at it again ? Any comments would be appreciated.
From 655b45785a85599d5fff5eb3b8d9b49b72f2991f Mon Sep 17 00:00:00 2001
From: Dong Zhu <redacted>
Date: Sat, 14 Sep 2013 23:32:14 +0800
This patch add a method into testptp.c to measure the time offset
between phc and system clock through the ioctl PTP_SYS_OFFSET.
Signed-off-by: Dong Zhu <redacted>
---
Documentation/ptp/testptp.c | 40 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 38 insertions(+), 2 deletions(-)
@@ -112,6 +112,8 @@ static void usage(char *progname)" -f val adjust the ptp clock frequency by 'val' ppb\n"" -g get the ptp clock time\n"" -h prints this message\n"+" -k val measure the time offset between phc and system clock "+"for 'val' times (Maximum 25)\n"" -p val enable output with a period of 'val' nanoseconds\n"" -P val enable or disable (val=1|0) the system clock PPS\n"" -s set the ptp clock time from the system time\n"
@@ -133,8 +135,12 @@ int main(int argc, char *argv[])structitimerspectimeout;structsigeventsigevent;+structptp_clock_time*pct;+structptp_sys_offset*sysoff;++char*progname;-intc,cnt,fd;+inti,c,cnt,fd;char*device=DEVICE;clockid_tclkid;
@@ -144,6 +150,8 @@ int main(int argc, char *argv[])intextts=0;intgettime=0;intoneshot=0;+intoffset=0;+intn_samples=0;intperiodic=0;intperout=-1;intpps=-1;
@@ -151,7 +159,7 @@ int main(int argc, char *argv[])progname=strrchr(argv[0],'/');progname=progname?1+progname:argv[0];-while(EOF!=(c=getopt(argc,argv,"a:A:cd:e:f:ghp:P:sSt:v"))){+while(EOF!=(c=getopt(argc,argv,"a:A:cd:e:f:ghk:p:P:sSt:v"))){switch(c){case'a':oneshot=atoi(optarg);
@@ -174,6 +182,10 @@ int main(int argc, char *argv[])case'g':gettime=1;break;+case'k':+offset=1;+n_samples=atoi(optarg);+break;case'p':perout=atoi(optarg);break;
@@ -376,6 +388,30 @@ int main(int argc, char *argv[])}}+if(offset){+sysoff=calloc(1,sizeof(*sysoff));+if(!sysoff){+perror("calloc");+return-1;+}+sysoff->n_samples=n_samples;++if(ioctl(fd,PTP_SYS_OFFSET,sysoff))+perror("PTP_SYS_OFFSET");+else+puts("phc and system clock time offset request okay");++pct=&sysoff->ts[0];+for(i=0;i<sysoff->n_samples;i++,pct++){+printf("system time: %ld.%ld\n",pct->sec,pct->nsec);+pct++;+printf("phc time: %ld.%ld\n",pct->sec,pct->nsec);+}+printf("system time: %ld.%ld\n",pct->sec,pct->nsec);++free(sysoff);+}+close(fd);return0;}
@@ -112,6 +112,8 @@ static void usage(char *progname)" -f val adjust the ptp clock frequency by 'val' ppb\n"" -g get the ptp clock time\n"" -h prints this message\n"+" -k val measure the time offset between phc and system clock "+"for 'val' times (Maximum 25)\n"
This line is getting a bit too long for the terminal. Please line up
the text, like this:
" -k val measure the time offset between phc and system clock\n"
" for 'val' times (Maximum 25)\n"
Also, when you resubmit the patch, add "net-next" and a patch version,
like this: [PATCH net-next v3].
Thanks,
Richard
Hi Richard,
Thanks for your comments, I modified the patch and resubmit it again:
From 7636f69b74c34eca14c85fd2d518da6044b94f53 Mon Sep 17 00:00:00 2001
From: Dong Zhu <redacted>
Date: Sun, 15 Sep 2013 17:12:52 +0800
This patch add a method into testptp.c to measure the time offset
between phc and system clock through the ioctl PTP_SYS_OFFSET.
Signed-off-by: Dong Zhu <redacted>
---
Documentation/ptp/testptp.c | 40 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 38 insertions(+), 2 deletions(-)
@@ -112,6 +112,8 @@ static void usage(char *progname)" -f val adjust the ptp clock frequency by 'val' ppb\n"" -g get the ptp clock time\n"" -h prints this message\n"+" -k val measure the time offset between phc and system clock\n"+" for 'val' times (Maximum 25)\n"" -p val enable output with a period of 'val' nanoseconds\n"" -P val enable or disable (val=1|0) the system clock PPS\n"" -s set the ptp clock time from the system time\n"
@@ -133,8 +135,12 @@ int main(int argc, char *argv[])structitimerspectimeout;structsigeventsigevent;+structptp_clock_time*pct;+structptp_sys_offset*sysoff;++char*progname;-intc,cnt,fd;+inti,c,cnt,fd;char*device=DEVICE;clockid_tclkid;
@@ -144,6 +150,8 @@ int main(int argc, char *argv[])intextts=0;intgettime=0;intoneshot=0;+intoffset=0;+intn_samples=0;intperiodic=0;intperout=-1;intpps=-1;
@@ -151,7 +159,7 @@ int main(int argc, char *argv[])progname=strrchr(argv[0],'/');progname=progname?1+progname:argv[0];-while(EOF!=(c=getopt(argc,argv,"a:A:cd:e:f:ghp:P:sSt:v"))){+while(EOF!=(c=getopt(argc,argv,"a:A:cd:e:f:ghk:p:P:sSt:v"))){switch(c){case'a':oneshot=atoi(optarg);
@@ -174,6 +182,10 @@ int main(int argc, char *argv[])case'g':gettime=1;break;+case'k':+offset=1;+n_samples=atoi(optarg);+break;case'p':perout=atoi(optarg);break;
@@ -376,6 +388,30 @@ int main(int argc, char *argv[])}}+if(offset){+sysoff=calloc(1,sizeof(*sysoff));+if(!sysoff){+perror("calloc");+return-1;+}+sysoff->n_samples=n_samples;++if(ioctl(fd,PTP_SYS_OFFSET,sysoff))+perror("PTP_SYS_OFFSET");+else+puts("phc and system clock time offset request okay");++pct=&sysoff->ts[0];+for(i=0;i<sysoff->n_samples;i++,pct++){+printf("system time: %ld.%ld\n",pct->sec,pct->nsec);+pct++;+printf("phc time: %ld.%ld\n",pct->sec,pct->nsec);+}+printf("system time: %ld.%ld\n",pct->sec,pct->nsec);++free(sysoff);+}+close(fd);return0;}
Hi Richard,
I developed a new patch and added a method to estimate the time offset
between system and phc clock.
Could you help reviewing it again ? If it do make sense I hope it could
be accepted.
Thanks !
From e524e3b68f3df3cd91acd814490d092bad05386b Mon Sep 17 00:00:00 2001
This patch add a method into testptp.c to measure the time offset
between phc and system clock through the ioctl PTP_SYS_OFFSET.
Signed-off-by: Dong Zhu <redacted>
---
Documentation/ptp/testptp.c | 65 +++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 63 insertions(+), 2 deletions(-)
@@ -100,6 +100,11 @@ static long ppb_to_scaled_ppm(int ppb)return(long)(ppb*65.536);}+staticint64_tpctns(structptp_clock_time*t)+{+returnt->sec*1000000000LL+t->nsec;+}+staticvoidusage(char*progname){fprintf(stderr,
@@ -112,6 +117,8 @@ static void usage(char *progname)" -f val adjust the ptp clock frequency by 'val' ppb\n"" -g get the ptp clock time\n"" -h prints this message\n"+" -k val measure the time offset between system and phc clock\n"+" for 'val' times (Maximum 25)\n"" -p val enable output with a period of 'val' nanoseconds\n"" -P val enable or disable (val=1|0) the system clock PPS\n"" -s set the ptp clock time from the system time\n"
@@ -133,8 +140,12 @@ int main(int argc, char *argv[])structitimerspectimeout;structsigeventsigevent;+structptp_clock_time*pct;+structptp_sys_offset*sysoff;++char*progname;-intc,cnt,fd;+inti,c,cnt,fd;char*device=DEVICE;clockid_tclkid;
@@ -144,14 +155,19 @@ int main(int argc, char *argv[])intextts=0;intgettime=0;intoneshot=0;+intpct_offset=0;+intn_samples=0;intperiodic=0;intperout=-1;intpps=-1;intsettime=0;+int64_tt1,t2,tp;+int64_tinterval,offset;+progname=strrchr(argv[0],'/');progname=progname?1+progname:argv[0];-while(EOF!=(c=getopt(argc,argv,"a:A:cd:e:f:ghp:P:sSt:v"))){+while(EOF!=(c=getopt(argc,argv,"a:A:cd:e:f:ghk:p:P:sSt:v"))){switch(c){case'a':oneshot=atoi(optarg);
@@ -174,6 +190,10 @@ int main(int argc, char *argv[])case'g':gettime=1;break;+case'k':+pct_offset=1;+n_samples=atoi(optarg);+break;case'p':perout=atoi(optarg);break;
@@ -376,6 +396,47 @@ int main(int argc, char *argv[])}}+if(pct_offset){+if(n_samples<=0||n_samples>25){+puts("n_samples should be between 1 and 25");+usage(progname);+return-1;+}++sysoff=calloc(1,sizeof(*sysoff));+if(!sysoff){+perror("calloc");+return-1;+}+sysoff->n_samples=n_samples;++if(ioctl(fd,PTP_SYS_OFFSET,sysoff))+perror("PTP_SYS_OFFSET");+else+puts("system and phc clock time offset request okay");++pct=&sysoff->ts[0];+for(i=0;i<sysoff->n_samples;i++){+t1=pctns(pct+2*i);+tp=pctns(pct+2*i+1);+t2=pctns(pct+2*i+2);+interval=t2-t1;+offset=(t2+t1)/2-tp;++printf("system time: %ld.%ld\n",+(pct+2*i)->sec,(pct+2*i)->nsec);+printf("phc time: %ld.%ld\n",+(pct+2*i+1)->sec,(pct+2*i+1)->nsec);+printf("system time: %ld.%ld\n",+(pct+2*i+2)->sec,(pct+2*i+2)->nsec);+printf("system/phc clock time offset is %ld ns\n"+"system clock time delay is %ld ns\n",+offset,interval);+}++free(sysoff);+}+close(fd);return0;}
This patch add a method into testptp.c to measure the time offset
between phc and system clock through the ioctl PTP_SYS_OFFSET.
Signed-off-by: Dong Zhu <redacted>
@@ -376,6 +387,31 @@ int main(int argc, char *argv[]) } }+ if (offset) {+ sysoff = calloc(1, sizeof(*sysoff));+ if (!sysoff) {+ perror("calloc");+ return -1;+ }+ sysoff->n_samples = n_samples;++ if (ioctl(fd, PTP_SYS_OFFSET, sysoff))+ perror("PTP_SYS_OFFSET");+ else+ puts("time offset between PHC and+ system clock request okay");
Don't break the string constant that way, there'll be all spaces between
"and" and "system" included in it. Do it like this:
puts("time offset between PHC and "
"system clock request okay");
WBR, Sergei