diff options
author | Anders Broman <anders.broman@ericsson.com> | 2006-10-04 17:36:40 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2006-10-04 17:36:40 +0000 |
commit | ca8bc2b83a2796fe9bb3de27efe65bb0c326881e (patch) | |
tree | 701ed849d039ff62e5f7f38b286d8b7d729558fe /wiretap | |
parent | 12819c3b19631b0226ed0d496eb7364ef0793d1c (diff) |
From Martin Warnes:
The patch addresses issues with higher precision packet
timings on top end iSeries hardware and should enable the iseries wiretap to handle timings in both micro and nano seconds.
svn path=/trunk/; revision=19428
Diffstat (limited to 'wiretap')
-rw-r--r-- | wiretap/iseries.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/wiretap/iseries.c b/wiretap/iseries.c index 7d4ad164b0..ba278c6437 100644 --- a/wiretap/iseries.c +++ b/wiretap/iseries.c @@ -159,9 +159,9 @@ iseries_open (wtap * wth, int *err, gchar ** err_info _U_) /* UNICODE identification */ char unicodemagic[ISERIES_HDR_MAGIC_LEN] = { '\xFF', '\xFE', '\x20', '\x00', '\x43', '\x00', '\x4F', '\x00', '\x4D', - '\x00', '\x4D', '\x00', '\x55', '\x00', '\x4E', '\x00', '\x49', '\x00', - '\x43', '\x00', '\x41' - }; + '\x00', '\x4D', '\x00', '\x55', '\x00', '\x4E', '\x00', '\x49', '\x00', + '\x43', '\x00', '\x41' + }; /* * Check that file starts with a valid iSeries COMMS TRACE header @@ -536,8 +536,8 @@ iseries_parse_packet (wtap * wth, FILE_T fh, * If we have Wiretap Header then populate it here * * XXX - Timer resolution on the iSeries is hardware dependant, the value for csec may be - * different on other platforms though all the traces I've seen seem so show resolution - * to 5 digits (i.e HH:MM:SS.nnnnn) so hopefully this will not require special handling + * different on other platforms though all the traces I've seen seem to show resolution + * to Milliseconds (i.e HH:MM:SS.nnnnn) or Nanoseconds (i.e HH:MM:SS.nnnnnn) */ if (wth->capture.iseries->sdate) { @@ -551,7 +551,16 @@ iseries_parse_packet (wtap * wth, FILE_T fh, tm.tm_sec = sec; tm.tm_isdst = -1; wth->phdr.ts.secs = mktime (&tm); - wth->phdr.ts.nsecs = csec * 10000; + /* Handle Millisecond precision for timer */ + if (csec > 99999) + { + wth->phdr.ts.nsecs = csec * 1000; + } + /* Handle Nanosecond precision for timer */ + else + { + wth->phdr.ts.nsecs = csec * 10000; + } wth->phdr.caplen = cap_len; wth->phdr.pkt_encap = WTAP_ENCAP_ETHERNET; pseudo_header->eth.fcs_len = -1; @@ -594,7 +603,7 @@ iseries_parse_packet (wtap * wth, FILE_T fh, } } - /* Convert UNICODE data to ASCII and determine line length*/ + /* Convert UNICODE data to ASCII and determine line length */ if (wth->capture.iseries->format == ISERIES_FORMAT_UNICODE) { buflen = iseries_UNICODE_to_ASCII (data, ISERIES_LINE_LENGTH); |