@@ -128,6 +128,7 @@ static void print_usage(void)
128
128
fprintf (stderr , "Options:\n" );
129
129
fprintf (stderr , " -t <type> (timestamp: (a)bsolute/(d)elta/(z)ero/(A)bsolute w date)\n" );
130
130
fprintf (stderr , " -H (read hardware timestamps instead of system timestamps)\n" );
131
+ fprintf (stderr , " -N (log nanosecond timestamps instead of microseconds)\n" );
131
132
fprintf (stderr , " -c (increment color mode level)\n" );
132
133
fprintf (stderr , " -i (binary output - may exceed 80 chars/line)\n" );
133
134
fprintf (stderr , " -a (enable additional ASCII output)\n" );
@@ -220,16 +221,22 @@ static int idx2dindex(int ifidx, int socket)
220
221
return i ;
221
222
}
222
223
223
- static int sprint_timestamp (char * ts_buffer , const char timestamp ,
224
+ static int sprint_timestamp (char * ts_buffer , const char timestamp , unsigned char use_ns ,
224
225
const struct timespec * ts , struct timespec * const last_ts )
225
226
{
226
227
int numchars = 0 ;
227
228
228
229
switch (timestamp ) {
229
230
case 'a' : /* absolute with timestamp */
230
- numchars = sprintf (ts_buffer , "(%010llu.%09llu) " ,
231
- (unsigned long long )ts -> tv_sec ,
232
- (unsigned long long )ts -> tv_nsec );
231
+ if (use_ns ) {
232
+ numchars = sprintf (ts_buffer , "(%010llu.%09llu) " ,
233
+ (unsigned long long )ts -> tv_sec ,
234
+ (unsigned long long )ts -> tv_nsec );
235
+ } else {
236
+ numchars = sprintf (ts_buffer , "(%010llu.%06llu) " ,
237
+ (unsigned long long )ts -> tv_sec ,
238
+ (unsigned long long )ts -> tv_nsec / 1000 );
239
+ }
233
240
break ;
234
241
235
242
case 'A' : /* absolute with date */
@@ -239,8 +246,13 @@ static int sprint_timestamp(char *ts_buffer, const char timestamp,
239
246
240
247
tm = * localtime (& ts -> tv_sec );
241
248
strftime (timestring , 24 , "%Y-%m-%d %H:%M:%S" , & tm );
242
- numchars = sprintf (ts_buffer , "(%s.%09llu) " , timestring ,
243
- (unsigned long long )ts -> tv_nsec );
249
+ if (use_ns ) {
250
+ numchars = sprintf (ts_buffer , "(%s.%09llu) " , timestring ,
251
+ (unsigned long long )ts -> tv_nsec );
252
+ } else {
253
+ numchars = sprintf (ts_buffer , "(%s.%06llu) " , timestring ,
254
+ (unsigned long long )ts -> tv_nsec / 1000 );
255
+ }
244
256
}
245
257
break ;
246
258
@@ -257,9 +269,15 @@ static int sprint_timestamp(char *ts_buffer, const char timestamp,
257
269
diff .tv_sec -- , diff .tv_nsec += 1000000000 ;
258
270
if (diff .tv_sec < 0 )
259
271
diff .tv_sec = diff .tv_nsec = 0 ;
260
- numchars = sprintf (ts_buffer , "(%03llu.%09llu) " ,
261
- (unsigned long long )diff .tv_sec ,
262
- (unsigned long long )diff .tv_nsec );
272
+ if (use_ns ) {
273
+ numchars = sprintf (ts_buffer , "(%03llu.%09llu) " ,
274
+ (unsigned long long )diff .tv_sec ,
275
+ (unsigned long long )diff .tv_nsec );
276
+ } else {
277
+ numchars = sprintf (ts_buffer , "(%03llu.%06llu) " ,
278
+ (unsigned long long )diff .tv_sec ,
279
+ (unsigned long long )diff .tv_nsec / 1000 );
280
+ }
263
281
264
282
if (timestamp == 'd' )
265
283
* last_ts = * ts ; /* update for delta calculation */
@@ -288,6 +306,7 @@ int main(int argc, char **argv)
288
306
unsigned char timestamp = 0 ;
289
307
unsigned char logtimestamp = 'a' ;
290
308
unsigned char hwtimestamp = 0 ;
309
+ unsigned char use_ns = 0 ;
291
310
unsigned char down_causes_exit = 1 ;
292
311
unsigned char dropmonitor = 0 ;
293
312
unsigned char extra_msg_info = 0 ;
@@ -339,7 +358,7 @@ int main(int argc, char **argv)
339
358
340
359
progname = basename (argv [0 ]);
341
360
342
- while ((opt = getopt (argc , argv , "t:HciaSs :lf:Ln:r:Dde8xT:h?" )) != -1 ) {
361
+ while ((opt = getopt (argc , argv , "t:HNciaSs :lf:Ln:r:Dde8xT:h?" )) != -1 ) {
343
362
switch (opt ) {
344
363
case 't' :
345
364
timestamp = optarg [0 ];
@@ -359,6 +378,10 @@ int main(int argc, char **argv)
359
378
hwtimestamp = 1 ;
360
379
break ;
361
380
381
+ case 'N' :
382
+ use_ns = 1 ;
383
+ break ;
384
+
362
385
case 'c' :
363
386
color ++ ;
364
387
break ;
@@ -834,7 +857,7 @@ int main(int argc, char **argv)
834
857
/* build common log format output */
835
858
if ((log ) || ((logfrmt ) && (silent == SILENT_OFF ))) {
836
859
837
- alen = sprint_timestamp (afrbuf , logtimestamp ,
860
+ alen = sprint_timestamp (afrbuf , logtimestamp , use_ns ,
838
861
& ts , & last_ts );
839
862
840
863
alen += sprintf (afrbuf + alen , "%*s " ,
@@ -864,7 +887,7 @@ int main(int argc, char **argv)
864
887
865
888
/* print (colored) long CAN frame style to stdout */
866
889
alen = sprintf (afrbuf , " %s" , (color > 2 ) ? col_on [idx % MAXCOL ] : "" );
867
- alen += sprint_timestamp (afrbuf + alen , timestamp , & ts , & last_ts );
890
+ alen += sprint_timestamp (afrbuf + alen , timestamp , use_ns , & ts , & last_ts );
868
891
alen += sprintf (afrbuf + alen , " %s%*s" ,
869
892
(color && (color < 3 )) ? col_on [idx % MAXCOL ] : "" ,
870
893
max_devname_len , devname [idx ]);
0 commit comments