aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2006-10-04 17:36:40 +0000
committerAnders Broman <anders.broman@ericsson.com>2006-10-04 17:36:40 +0000
commitca8bc2b83a2796fe9bb3de27efe65bb0c326881e (patch)
tree701ed849d039ff62e5f7f38b286d8b7d729558fe /wiretap
parent12819c3b19631b0226ed0d496eb7364ef0793d1c (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.c23
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);