--- tcptrace/tcptrace.h.bak 2003-11-22 13:13:57.000000000 +0200 +++ tcptrace/tcptrace.h 2004-03-03 18:29:42.000000000 +0200 @@ -535,6 +535,8 @@ struct stcp_pair { /* connection naming information */ char *a_hostname; char *b_hostname; + char *a_hostaddr; + char *b_hostaddr; char *a_portname; char *b_portname; char *a_endpoint; @@ -702,6 +704,7 @@ extern Bool verify_checksums; extern Bool print_rtt; extern Bool print_owin; extern Bool printbrief; +extern Bool printstartend; extern Bool printsuppress; extern Bool printem; extern Bool printallofem; @@ -740,6 +743,7 @@ extern Bool ns_hdrs; extern Bool dup_ack_handling; extern Bool csv; extern Bool tsv; +extern Bool utc; extern u_long remove_live_conn_interval; extern u_long nonreal_live_conn_interval; extern u_long remove_closed_conn_interval; --- tcptrace/tcptrace.c.bak 2003-11-22 13:13:57.000000000 +0200 +++ tcptrace/tcptrace.c 2004-03-03 18:29:34.000000000 +0200 @@ -112,6 +112,7 @@ Bool dump_packet_data = FALSE; Bool print_rtt = FALSE; Bool print_owin = FALSE; Bool printbrief = TRUE; +Bool printstartend = FALSE; Bool printsuppress = FALSE; Bool printem = FALSE; Bool printallofem = FALSE; @@ -144,6 +145,7 @@ Bool ns_hdrs = TRUE; Bool dup_ack_handling = TRUE; Bool csv = FALSE; Bool tsv = FALSE; +Bool utc = FALSE; u_long remove_live_conn_interval = REMOVE_LIVE_CONN_INTERVAL; u_long nonreal_live_conn_interval = NONREAL_LIVE_CONN_INTERVAL; u_long remove_closed_conn_interval = REMOVE_CLOSED_CONN_INTERVAL; @@ -264,7 +266,8 @@ static struct ext_bool_op { "display the long output as tab separated values"}, {"turn_off_BSD_dupack", &dup_ack_handling, FALSE, "turn of the BSD version of the duplicate ack handling"}, - + {"utc", &utc, TRUE, + "print dates as UTC / ISO8601"}, }; #define NUM_EXTENDED_BOOLS (sizeof(extended_bools) / sizeof(struct ext_bool_op)) @@ -567,6 +570,7 @@ Note: these options are first read from Output format options\n\ -b brief output format\n\ -l long output format\n\ + -g host addresses and start and end of connections\n\ -r print rtt statistics (slower for large files)\n\ -W report on estimated congestion window (not generally useful)\n\ -q no output (if you just want modules output)\n\ @@ -2168,6 +2172,7 @@ ParseArgs( BadArg(argsource, "-f requires a filter\n"); } break; + case 'g': printstartend = TRUE; break; case 'h': Help(argv[i]+1); *(argv[i]+1) = '\00'; break; case 'i': Ignore(argsource,argv[i]+1); /* { @@ -2272,6 +2277,7 @@ ParseArgs( case 'b': printbrief = !TRUE; break; case 'c': ignore_non_comp = !TRUE; break; case 'e': save_tcp_data = FALSE; break; + case 'g': printstartend = !TRUE; break; case 'l': printbrief = !FALSE; break; case 'n': resolve_ipaddresses = !FALSE; --- tcptrace/names.c.bak 2003-11-22 13:13:56.000000000 +0200 +++ tcptrace/names.c 2004-03-03 16:12:18.000000000 +0200 @@ -161,7 +161,7 @@ HostName( static int cache = -1; struct hostent *phe; char *sb_host; - static char name_buf[100]; + static char name_buf[256]; char *adr; adr = HostAddr(ipaddress); @@ -169,7 +169,7 @@ HostName( if (!resolve_ipaddresses) { return(adr); } - + /* check the cache */ if (cache == -1) { cache = cacreate("host",250,0); @@ -226,7 +226,7 @@ EndpointName( ipaddr ipaddress, portnum port) { - static char name_buf[100]; + static char name_buf[256]; char *sb_host; char *sb_port; --- tcptrace/print.c.bak 2003-11-22 13:13:57.000000000 +0200 +++ tcptrace/print.c 2004-03-03 18:46:03.000000000 +0200 @@ -87,23 +87,33 @@ ts2ascii( struct timeval *ptime) { static char buf[32]; + static char the_epoch[] = " "; struct tm *ptm; char *now; int decimal; if (ZERO_TIME(ptime)) - return(" "); - - ptm = localtime((time_t *)&ptime->tv_sec); - now = asctime(ptm); + return(the_epoch); - /* splice in the microseconds */ - now[19] = '\00'; -/* decimal = (ptime->tv_usec + 50) / 100;*/ /* for 4 digits */ - decimal = ptime->tv_usec; /* for 6 digits */ + if (utc) { + ptm = gmtime(&ptime->tv_sec); + if (ptm == NULL) return the_epoch; + snprintf(buf,sizeof(buf), "%04u%02u%02uT%02u%02u%02u.%06luZ", + ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday, + ptm->tm_hour, ptm->tm_min, ptm->tm_sec, (unsigned long)ptime->tv_usec); + } else { + ptm = localtime((time_t *)&ptime->tv_sec); + if (ptm == NULL) return the_epoch; + now = asctime(ptm); + + /* splice in the microseconds */ + now[19] = '\00'; + /* decimal = (ptime->tv_usec + 50) / 100;*/ /* for 4 digits */ + decimal = ptime->tv_usec; /* for 6 digits */ - now[24] = '\00'; /* nuke the newline */ - snprintf(buf,sizeof(buf), "%s.%06d %s", now, decimal, &now[20]); + now[24] = '\00'; /* nuke the newline */ + snprintf(buf,sizeof(buf), "%s.%06d %s", now, decimal, &now[20]); + } return(buf); } --- tcptrace/output.c.bak 2003-11-22 13:13:57.000000000 +0200 +++ tcptrace/output.c 2004-03-03 18:08:05.000000000 +0200 @@ -184,12 +184,25 @@ FormatBrief( { tcb *pab = &ptp->a2b; tcb *pba = &ptp->b2a; - static char infobuf[100]; + static char infobuf[1024]; - snprintf(infobuf,sizeof(infobuf),"%s - %s (%s2%s)", - ptp->a_endpoint, ptp->b_endpoint, - pab->host_letter, pba->host_letter); - return(infobuf); + if (printstartend) { + if (resolve_ipaddresses) { + snprintf(infobuf,sizeof(infobuf),"%s (%s) - %s (%s) (%s2%s)", + ptp->a_endpoint, ptp->a_hostaddr, ptp->b_endpoint, ptp->b_hostaddr, + pab->host_letter, pba->host_letter); + } else { + snprintf(infobuf,sizeof(infobuf),"%s - %s (%s2%s)", + ptp->a_endpoint, ptp->b_endpoint, + pab->host_letter, pba->host_letter); + } + return(infobuf); + } else { + snprintf(infobuf,sizeof(infobuf),"%s - %s (%s2%s)", + ptp->a_endpoint, ptp->b_endpoint, + pab->host_letter, pba->host_letter); + return(infobuf); + } } @@ -236,7 +249,7 @@ PrintTrace( /* Print the start and end times. In other words, * print the time of the first and the last packet */ - fprintf(stdout,"%ld.%ld %s %ld.%ld %s", + fprintf(stdout,"%ld.%06ld %s %ld.%06ld %s", (long)ptp->first_time.tv_sec, (long)ptp->first_time.tv_usec, sp, (long)ptp->last_time.tv_sec, (long)ptp->last_time.tv_usec, sp); sv_print_count += 2; @@ -632,8 +645,8 @@ PrintBrief( /* new version */ fprintf(stdout,"%*s", -max_width, FormatBrief(ptp)); - fprintf(stdout," %4" FS_ULL ">", pab->packets); - fprintf(stdout," %4" FS_ULL "<", pba->packets); + fprintf(stdout," %6" FS_ULL ">", pab->packets); + fprintf(stdout," %6" FS_ULL "<", pba->packets); } else { /* old version */ @@ -657,6 +670,10 @@ PrintBrief( fprintf(stdout," (reset)"); if ((ptp->a2b.packets == 0) || (ptp->b2a.packets == 0)) fprintf(stdout," (unidirectional)"); + if (printstartend) { + fprintf(stdout,"\n start %s", ts2ascii(&ptp->first_time)); + fprintf(stdout," end %s", ts2ascii(&ptp->last_time)); + } fprintf(stdout,"\n"); @@ -950,7 +967,7 @@ UDPFormatBrief( { ucb *pab = &pup->a2b; ucb *pba = &pup->b2a; - static char infobuf[100]; + static char infobuf[1024]; snprintf(infobuf,sizeof(infobuf),"%s - %s (%s2%s)", pup->a_endpoint, pup->b_endpoint, --- tcptrace/trace.c.bak 2004-03-03 14:39:42.000000000 +0200 +++ tcptrace/trace.c 2004-03-03 16:51:14.000000000 +0200 @@ -521,11 +521,13 @@ NewTTP( /* fill in connection name fields */ ptp->a_hostname = strdup(HostName(ptp->addr_pair.a_address)); + ptp->a_hostaddr = strdup(HostAddr(ptp->addr_pair.a_address)); ptp->a_portname = strdup(ServiceName(ptp->addr_pair.a_port)); ptp->a_endpoint = strdup(EndpointName(ptp->addr_pair.a_address, ptp->addr_pair.a_port)); ptp->b_hostname = strdup(HostName(ptp->addr_pair.b_address)); + ptp->b_hostaddr = strdup(HostAddr(ptp->addr_pair.b_address)); ptp->b_portname = strdup(ServiceName(ptp->addr_pair.b_port)); ptp->b_endpoint = strdup(EndpointName(ptp->addr_pair.b_address, @@ -1209,10 +1211,12 @@ RemoveTcpPair( free(ptp->b2a.host_letter); free(ptp->a_hostname); + free(ptp->a_hostaddr); free(ptp->a_portname); free(ptp->a_endpoint); free(ptp->b_hostname); + free(ptp->a_hostaddr); free(ptp->b_portname); free(ptp->b_endpoint);