Name | Date | Size | #Lines | LOC | ||
---|---|---|---|---|---|---|
.. | 03-May-2022 | - | ||||
cygwin-includes/ | H | 01-Jul-2013 | - | 1,637 | 844 | |
cygwin-libs/ | H | 01-Jul-2013 | - | |||
flex_bison/ | H | 01-Jul-2013 | - | |||
input/ | H | 03-May-2022 | - | 72,422 | 70,489 | |
.gitignore | H A D | 01-Jul-2013 | 144 | 14 | 12 | |
ARGS | H A D | 01-Jul-2013 | 1.9 KiB | 44 | 40 | |
CHANGES | H A D | 01-Jul-2013 | 26.2 KiB | 667 | 564 | |
COPYING | H A D | 01-Jul-2013 | 17.6 KiB | 341 | 281 | |
COPYRIGHT | H A D | 01-Jul-2013 | 2.3 KiB | 55 | 54 | |
FAQ | H A D | 01-Jul-2013 | 40.4 KiB | 978 | 700 | |
INSTALL | H A D | 01-Jul-2013 | 1.1 KiB | 40 | 29 | |
Makefile.empty | H A D | 01-Jul-2013 | 64 | 5 | 4 | |
Makefile.in | H A D | 01-Jul-2013 | 11.5 KiB | 430 | 231 | |
README | H A D | 01-Jul-2013 | 1.9 KiB | 75 | 53 | |
README.OpenVMS | H A D | 01-Jul-2013 | 4.6 KiB | 147 | 108 | |
README.cygwin | H A D | 01-Jul-2013 | 656 | 21 | 15 | |
README.linux | H A D | 01-Jul-2013 | 731 | 26 | 24 | |
README.mailing_list | H A D | 01-Jul-2013 | 2.9 KiB | 50 | 44 | |
README.modules | H A D | 01-Jul-2013 | 272 | 9 | 6 | |
README.pcap | H A D | 01-Jul-2013 | 2.5 KiB | 67 | 48 | |
README.sgi | H A D | 01-Jul-2013 | 2.2 KiB | 57 | 43 | |
README.tline_graphs | H A D | 01-Jul-2013 | 18.8 KiB | 600 | 583 | |
README.tput_graphs | H A D | 01-Jul-2013 | 1.1 KiB | 27 | 19 | |
README.tru64 | H A D | 01-Jul-2013 | 554 | 17 | 11 | |
README.version | H A D | 01-Jul-2013 | 2 KiB | 89 | 44 | |
README.xpl2gpl | H A D | 01-Jul-2013 | 1.4 KiB | 49 | 35 | |
THANKS | H A D | 01-Jul-2013 | 3.2 KiB | 73 | 67 | |
WWW | H A D | 01-Jul-2013 | 73 | 4 | 2 | |
aclocal.m4 | H A D | 01-Jul-2013 | 26.3 KiB | 1,055 | 1,007 | |
avl.c | H A D | 01-Jul-2013 | 11.5 KiB | 511 | 337 | |
compress.c | H A D | 01-Jul-2013 | 18.8 KiB | 777 | 482 | |
compress.h | H A D | 01-Jul-2013 | 3.9 KiB | 102 | 23 | |
config.guess | H A D | 01-Jul-2013 | 38.2 KiB | 1,369 | 1,189 | |
config.h | H A D | 01-Jul-2013 | 2.9 KiB | 78 | 6 | |
config.sub | H A D | 01-Jul-2013 | 26.8 KiB | 1,357 | 1,218 | |
configure | H A D | 01-Jul-2013 | 161.7 KiB | 5,793 | 5,138 | |
configure.in | H A D | 01-Jul-2013 | 2.4 KiB | 104 | 79 | |
dot_tcptracerc | H A D | 01-Jul-2013 | 629 | 25 | 21 | |
dstring.c | H A D | 01-Jul-2013 | 4.5 KiB | 196 | 87 | |
dstring.h | H A D | 01-Jul-2013 | 375 | 16 | 8 | |
dyncounter.c | H A D | 01-Jul-2013 | 16.2 KiB | 760 | 475 | |
dyncounter.h | H A D | 01-Jul-2013 | 3.1 KiB | 81 | 14 | |
erf.c | H A D | 01-Jul-2013 | 11.3 KiB | 363 | 240 | |
etherpeek.c | H A D | 01-Jul-2013 | 12.9 KiB | 435 | 262 | |
file_formats.h | H A D | 01-Jul-2013 | 4.6 KiB | 123 | 34 | |
filt_parser.y | H A D | 01-Jul-2013 | 4.6 KiB | 186 | 99 | |
filt_scanner.l | H A D | 01-Jul-2013 | 4.7 KiB | 163 | 78 | |
filter.c | H A D | 01-Jul-2013 | 43 KiB | 1,821 | 1,353 | |
filter.h | H A D | 01-Jul-2013 | 5.6 KiB | 206 | 101 | |
filter_vars.h | H A D | 01-Jul-2013 | 7.9 KiB | 149 | 72 | |
gcache.c | H A D | 01-Jul-2013 | 20.5 KiB | 859 | 510 | |
gcache.h | H A D | 01-Jul-2013 | 3.4 KiB | 99 | 25 | |
install-sh | H A D | 01-Jul-2013 | 5.5 KiB | 251 | 152 | |
ipv6.c | H A D | 01-Jul-2013 | 18 KiB | 719 | 432 | |
ipv6.h | H A D | 01-Jul-2013 | 5.1 KiB | 151 | 53 | |
make_vms.com | H A D | 01-Jul-2013 | 13.2 KiB | 414 | 413 | |
mfiles.c | H A D | 01-Jul-2013 | 9.9 KiB | 489 | 295 | |
mod_collie.c | H A D | 01-Jul-2013 | 9.4 KiB | 412 | 246 | |
mod_collie.h | H A D | 01-Jul-2013 | 2.6 KiB | 65 | 8 | |
mod_http.c | H A D | 01-Jul-2013 | 42.1 KiB | 1,659 | 1,149 | |
mod_http.h | H A D | 01-Jul-2013 | 2.6 KiB | 65 | 8 | |
mod_inbounds.c | H A D | 01-Jul-2013 | 43.5 KiB | 1,598 | 1,156 | |
mod_inbounds.h | H A D | 01-Jul-2013 | 1.9 KiB | 43 | 12 | |
mod_realtime.c | H A D | 01-Jul-2013 | 10.3 KiB | 383 | 252 | |
mod_realtime.h | H A D | 01-Jul-2013 | 2.7 KiB | 67 | 10 | |
mod_rttgraph.c | H A D | 01-Jul-2013 | 11.4 KiB | 486 | 308 | |
mod_rttgraph.h | H A D | 01-Jul-2013 | 2.6 KiB | 64 | 7 | |
mod_slice.c | H A D | 01-Jul-2013 | 9.6 KiB | 377 | 207 | |
mod_slice.h | H A D | 01-Jul-2013 | 2.6 KiB | 65 | 7 | |
mod_tcplib.c | H A D | 01-Jul-2013 | 103.4 KiB | 3,906 | 2,086 | |
mod_tcplib.h | H A D | 01-Jul-2013 | 5.3 KiB | 153 | 71 | |
mod_traffic.c | H A D | 03-May-2022 | 35.8 KiB | 1,377 | 981 | |
mod_traffic.h | H A D | 01-Jul-2013 | 2.6 KiB | 65 | 7 | |
modules.h | H A D | 01-Jul-2013 | 11.2 KiB | 284 | 145 | |
names.c | H A D | 01-Jul-2013 | 7.3 KiB | 277 | 157 | |
netm.c | H A D | 01-Jul-2013 | 6.9 KiB | 278 | 154 | |
netscout.c | H A D | 01-Jul-2013 | 8.2 KiB | 279 | 162 | |
nlanr.c | H A D | 01-Jul-2013 | 7.6 KiB | 240 | 93 | |
ns.c | H A D | 01-Jul-2013 | 11.8 KiB | 471 | 295 | |
output.c | H A D | 01-Jul-2013 | 35.3 KiB | 1,153 | 843 | |
plotter.c | H A D | 01-Jul-2013 | 19.6 KiB | 924 | 634 | |
pool.c | H A D | 01-Jul-2013 | 15 KiB | 534 | 349 | |
pool.h | H A D | 01-Jul-2013 | 2.5 KiB | 69 | 9 | |
poolaccess.c | H A D | 01-Jul-2013 | 4.6 KiB | 215 | 131 | |
print.c | H A D | 01-Jul-2013 | 20.1 KiB | 787 | 583 | |
rexmit.c | H A D | 01-Jul-2013 | 20.9 KiB | 794 | 478 | |
snoop.c | H A D | 01-Jul-2013 | 12 KiB | 446 | 252 | |
snprintf_vms.c | H A D | 01-Jul-2013 | 213 | 14 | 11 | |
tcpdump.c | H A D | 03-May-2022 | 14.3 KiB | 497 | 336 | |
tcpdump.h | H A D | 03-May-2022 | 8.7 KiB | 257 | 142 | |
tcptrace.c | H A D | 01-Jul-2013 | 80.1 KiB | 2,792 | 2,063 | |
tcptrace.h | H A D | 03-May-2022 | 37.4 KiB | 1,203 | 732 | |
tcptrace.man | H A D | 01-Jul-2013 | 10 KiB | 404 | 400 | |
tcptrace.opt | H A D | 01-Jul-2013 | 483 | 37 | 36 | |
thruput.c | H A D | 01-Jul-2013 | 5 KiB | 160 | 72 | |
trace.c | H A D | 01-Jul-2013 | 104.8 KiB | 3,679 | 2,558 | |
udp.c | H A D | 01-Jul-2013 | 11.3 KiB | 440 | 273 | |
version.c | H A D | 01-Jul-2013 | 2.5 KiB | 66 | 6 | |
version.h | H A D | 01-Jul-2013 | 2.8 KiB | 76 | 11 | |
versnum.c | H A D | 01-Jul-2013 | 2.5 KiB | 69 | 12 | |
xpl2gpl | H A D | 01-Jul-2013 | 42 KiB | 1,403 | 1,247 |
README
1Fri May 25, 2001 2 3Shawn Ostermann 4ostermann@cs.ohiou.edu 5 6tcptrace is a TCP connection analysis tool. It can tell you detailed 7information about TCP connections by sifting through dump files. The 8dump file formats supported are: 9 Standard tcpdump format (you need the pcap library) 10 Sun's snoop format 11 Macintosh Etherpeek format 12 HP/NetMetrix protocol analysis format 13 NS simulator output format 14 NetScout 15 NLANR Tsh Format 16 17To see the graphs, you'll also need Tim Shepard's xplot program, 18available at http://www.xplot.org 19 20I've switched to using "./configure" to set up the Makefile. That 21seems to have eased portability problems a great deal. Just say 22"./configure" and then "make" to build the program. 23 24Most of the rest of the Docs are on the web. Check out: 25 http://www.tcptrace.org/ 26 27 28Supported Platforms 29------------------- 30 31The program is developed here at OU on Sparc machines running Solaris 328. Our intention is that it also run under common Unix variants. In 33particular, we try to test each release on the following platforms: 34 NetBSD 35 FreeBSD 36 Linux 37 Darwin/OSX (Mac) 38 Tru64 (Alpha) 39 40We appreciate feedback and fixes on these or other platforms and will 41attempt to modify the program to work on other platforms if we can get 42enough help from people with access to those platforms and the changes 43are not too "esthetically disagreeable". 44 45Running the program 46------------------- 47 48Some simple examples: 49 500) What are the args and what do they mean??? 51 tcptrace 52 531) Run the program quickly over a dump file 54 tcptrace dumpfile 55 562) Get longer output 57 tcptrace -l dumpfile 58 593) Generate lots of pretty plot files (you need xplot to see them) 60 tcptrace -G dumpfile 61 624) Print the segment contents as you go 63 tcptrace -p dumpfile 64 655) Print progress info (useful for large files) 66 tcptrace -t dumpfile 67 68Of course, you can chain arguments together until you get just what 69you want. 70 71 72Let me know what you think.... 73 74Shawn 75
README.OpenVMS
1Wed May 22, 2002 2 3Matt Muggeridge 4Matt.Muggeridge@hp.com 5 6The information contained in this document describes the OpenVMS port 7of the tcptrace tool, written by Shawn Ostermann. Refer to the 8"README" file for more information on tcptrace. 9 10This document contains: 11 12 A) Running tcptrace 13 B) Build and Install 14 C) Code Changes to Support OpenVMS 15 16 17A) Running tcptrace 18------------------- 19 20OpenVMS applications that parse command-line arguments, such as 21tcptrace, must be invoked with a foreign command. A foreign command 22can be manually created by declaring a DCL symbol, or automatically 23created by defining the DCL$PATH logical to include the directory 24path of your application. The examples below use a DCL symbol. 25 26There is a name-space clash with "tcptrace". TCP/IP Services V5.0 and 27later ship an application named TCPTRACE.EXE which is used to capture 28trace information, similar to "tcpdump". To avoid this name-space 29clash, it is recommended that this "tcptrace" program is invoked by a 30different name. In the examples below, the name used is "tcpanal", 31for TCP Analysis. 32 33The steps for running tcpanal are as follows: 34 35 1) Creating the foreign command 36 This is created for you in the DCL command procedure MAKE_VMS.COM. 37 If desired, modify MAKE_VMS.COM to change the name of the foreign 38 command. By default, a command similar to the following is used in 39 MAKE_VMS.COM: 40 $ tcpanal :== $<directory path>tcptrace.exe 41 42 2) Execute the foreign command 43 $ tcpanal 44 45 46B) Build and Install 47-------------------- 48tcptrace on OpenVMS was built and tested using: 49 50 Compaq C V6.4-006 on OpenVMS Alpha V7.2-2 and OpenVMS Alpha V7.3, 51 Compaq C V6.2-009 on OpenVMS Alpha V7.2-2 52 No VAX testing has been attempted. 53 54Step 1: Get pcap library 55 If you don't want to analyse dump files that were created using the 56 PCAP library, such as tcpdump, WinDump, Ethereal, then you should 57 comment out "GROK_TCPDUMP" from the MAKE_VMS.COM procedure and it 58 will be skipped in the compilation. 59 60Step 2: Edit MAKE_VMS.COM 61 Only necessary if you want to change the file formats supported, 62 the modules compiled in, compiler flags, etc (it's commented) 63 64Step 3: Run "$ @MAKE_VMS" 65 That should create tcptrace and define the foreign symbol for 66 invoking it. The foreign symbol is needed due to the name-space 67 clash (see README_VMS.TXT). It is suggested you use the name 68 "tcpanal". 69 70 To manually create a foreign command use syntax similar to: 71 72 $ tcpanal :== $<directory path>tcptrace.exe 73 74 For automatic foreign commands, copy tcptrace.exe to a directory 75 specified in the DCL$PATH logical. E.g. assuming DCL$PATH logical 76 has been created as: 77 78 $ define DCL$PATH disk$tools:[bin] 79 $ copy tcptrace.exe disk$tools:[bin]tcpanal.exe 80 81 82C) Code Changes to Support OpenVMS 83---------------------------------- 84 85New Files 86==================================================================== 87readme.OpenVMS - this file 88make_vms.com - DCL command procedure to build tcptrace 89snprintf_vms.c - replacement for snprintf() 90includes_vms.tlb - library of include files not shipped with OpenVMS 91tcptrace.opt - linker options file 92 93Missing Header Files - includes_vms.tlb 94--------------------------------------- 95 The following header files are not supplied with the current version 96 of OpenVMS compilers nor TCP/IP. They have been built into a text 97 library "includes_vms.tlb" which is referenced during compilation. 98 99 netinet/in_systm.h 100 machine/endian.h 101 netinet/if_ether.h 102 netinet/ip.h 103 netinet/udp.h 104 netinet/tcp.h (newer version needed than in tcpip$examples) 105 pcap.h (from PCAP distribution) 106 net/bpf.h 107 108 The command used to build this library was: 109 110 $ libr/create/text includes_vms in_systm.h, endian.h, - 111 if_ether.h, ip.h, udp.h, tcp.h, pcap.h, bpf.h 112 113 114Missing snprintf() - snprintf_vms() 115----------------------------------- 116The current version of the CRTL does not support snprintf(). An 117OpenVMS specific module was created "snprintf_vms.c" to resolve this. 118The redefinition was made in tcptrace.h (see below). 119 120Modified Files 121==================================================================== 122 123compress.c 124---------- 125The current release of OpenVMS does not support fork(). These 126occurrences were changed to vfork(). 127 128filter_parser.c 129--------------- 130OpenVMS uses a builtin function for alloca(). The necessary 131redefinitions were made. 132 133gcache.c 134-------- 135Check if bzero or bcopy are defined before redefining them. On 136OpenVMS bzero and bcopy are defined to use the C builtins which are 137supposed to be higher performing. 138 139tcptrace.h 140---------- 141Define snprintf() to point to OpenVMS declaration snprintf_vms() 142 143 144Matt. 145 146--- end --- 147
README.cygwin
1To build tcptrace on windows using the cygwin UNIX environment follow the 2steps below: 3 41. For Windows 95/98/Me: 5 cp cygwin-libs/win9x/libwpcap.a cygwin-libs/ 6 7 For Windows NT/2000/XP: 8 cp cygwin-libs/winNT/libwpcap.a cygwin-libs/ 9 102. ./configure 113. make (This leaves tcptrace.exe in the current directory) 124. Installation: 13 - Copy the *.dll files from cygwin-libs/win9x/ "OR" cygwin-libs/winNT/ 14 into C:\WINDOWS\System32\ (OR C:\WINDOWS\System\) 15 - Copy tcptrace.exe (just built in step 3) into C:\WINDOWS\ 16 17You should now be able to access tcptrace system-wide. 18 19--Avinash Lakhiani (alakhian@tcptrace.org) 20 4 July 2002 21
README.linux
1If you have trouble, try this suggestion from Peter Waltenberg: 2 3>> From peterw@dascom.com Mon Jul 13 22:32 EST 1998 4>> X-Priority: 3 (Normal) 5>> Date: Tue, 14 Jul 1998 08:31:57 +1000 (EST) 6>> Reply-To: peterw@dascom.com 7>> Organization: DASCOM 8>> Sender: peterw@mulga.surf.dascom.com 9>> From: Peter Waltenberg <peterw@dascom.com> 10>> To: Shawn Ostermann <sdo@picard.cs.ohiou.edu> 11>> Subject: Re: tcptrace 12>> 13>> On Linux with glibc-2 it needs 14>> 15>> DEFINES += -D_BSD_SOURCE 16>> 17>> to build properly. 18>> 19>> It's simply a matter of which "style" of tcphdr struct naming is 20>> pulled in from the include files. 21>> 22>> From memory the "-D_BSD_SOURCE" is safe for older Linux setups as 23>> well, however I can't test it. 24>> 25>> Peter 26
README.mailing_list
1There are currently four mailing lists that pertain to tcptrace. The 2two intended for normal users are the "tcptrace" and "tcptrace-announce" 3mailing lists. 4 5tcptrace-announce is a very low traffic list, which probably only sees 6one or two messages a year. Everyone who uses tcptrace is encouraged to 7subscribe to this list, as it is used to spread the word when significant 8new versions of the program come out and major bugs are found and fixed. 9You can subscribe to the tcptrace-announce list by sending an email to 10majordomo@tcptrace.org that contains the text "subscribe tcptrace-announce". 11Should you wish to be removed from the list, all you need to do is send 12an email to majordomo@tcptrace.org with the text "unsubscribe tcptrace-announce" 13in the body. No one except the list owner at tcptrace.org may post to this 14list. 15 16The list that serves as a forum for most tcptrace related discussion can 17be subscribed to by sending email to majordomo@tcptrace.org with the text 18"subscribe tcptrace" contained in the body. Unsubscribing is as easy as 19sending majordomo@tcptrace.org a message containing "unsubscribe tcptrace" in 20the body. Posting to this list is restricted to list members only, due to 21problems with spam and such. Traffic on this list is rather light as well, 22mostly occurring in short spurts when someone has a question or shares some 23tcptrace related software they've written with the community. You may post 24to the list by sending your message to tcptrace@tcptrace.org, if you are 25subscribed to the list. Before posting questions to this list, please consider 26that there are about 400 members, so if your question is just something basic 27about compiling the program or reading input files perhaps the tcptrace- 28maintainers list discussed in the next paragraph is a better venue to ask it. 29Problems with subscribing/unsubscribing should be sent to 30owner-tcptrace@tcptrace.org 31 32There are also two lists "tcptrace-bugs" and "tcptrace-maintainers" which are 33used for notifying us that there is a problem. If you find what you think is 34a bug in the software, please send a message to tcptrace-bugs@tcptrace.org. 35This list has all the active tcptrace developers on it, so usually someone can 36get on it and write a bugfix fairly quickly, but it's also quite nice when 37people send in their own bugfix code. tcptrace-maintainers@tcptrace.org is 38the list which you can use to contact all the people responsible for keeping 39up the tcptrace mailing lists, website, and CVS tree. Problems compiling 40tcptrace and questions about how to use the software or interpreting the 41output it produces should be addressed to the tcptrace-maintainers list. 42You will generally receive an answer fairly promptly. 43 44tcptrace was written by Shawn Ostermann at Ohio University, who can be 45reached at ostermann@cs.ohiou.edu to ask questions about the licensing 46of the software. 47 48HTML archives of the "tcptrace" and "tcptrace-bugs" lists can be found on 49the tcptrace website at http://www.tcptrace.org. 50
README.modules
1Mon Jul 14, 1997 2 3I added a "plugin module" interface (actually, "compile-in") which 4makes it a lot easier to add warts to the program for special purpose 5tasks. There's an example in the modules.h header file (commented 6out) that include the module in mod_http.c 7 8Shawn 9
README.pcap
1Mon Jul 14, 1997 2 3To read tcpdump files, you need to packet capture library from LBL. 4If you already have tcpdump, then your probably already have it 5installed. If not, then check out: 6 7 ftp://ftp.ee.lbl.gov/libpcap.tar.Z 8 9These sources have been tested with the 0.4 version of libpcap... 10 11--sdo 12 13---------------------------------------------------------------------- 14 15The pcap README file: 16 17@(#) $Header$ (LBL) 18 19LIBPCAP 0.4 20Lawrence Berkeley National Laboratory 21Network Research Group 22libpcap@ee.lbl.gov 23ftp://ftp.ee.lbl.gov/libpcap.tar.Z 24 25This directory contains source code for libpcap, a system-independent 26interface for user-level packet capture. libpcap provides a portable 27framework for low-level network monitoring. Applications include 28network statistics collection, security monitoring, network debugging, 29etc. Since almost every system vendor provides a different interface 30for packet capture, and since we've developed several tools that 31require this functionality, we've created this system-independent API 32to ease in porting and to alleviate the need for several 33system-dependent packet capture modules in each application. 34 35Note well: this interface is new and is likely to change. 36 37The libpcap interface supports a filtering mechanism based on the 38architecture in the BSD packet filter. BPF is described in the 1993 39Winter Usenix paper ``The BSD Packet Filter: A New Architecture for 40User-level Packet Capture''. A compressed postscript version is in: 41 42 ftp://ftp.ee.lbl.gov/papers/bpf-usenix93.ps.Z. 43 44Although most packet capture interfaces support in-kernel filtering, 45libpcap utilizes in-kernel filtering only for the BPF interface. 46On systems that don't have BPF, all packets are read into user-space 47and the BPF filters are evaluated in the libpcap library, incurring 48added overhead (especially, for selective filters). Ideally, libpcap 49would translate BPF filters into a filter program that is compatible 50with the underlying kernel subsystem, but this is not yet implemented. 51 52BPF is standard in 4.4BSD, BSD/386, NetBSD, and FreeBSD. DEC OSF/1 53uses the packetfilter interface but has been extended to accept BPF 54filters (which libpcap utilizes). Also, you can add BPF filter support 55to Ultrix using the kernel source and/or object patches available in: 56 57 ftp://gatekeeper.dec.com/pub/DEC/net/bpfext42.tar.Z. 58 59Problems, bugs, questions, desirable enhancements, source code 60contributions, etc., should be sent to the email address 61"libpcap@ee.lbl.gov". 62 63 - Steve McCanne 64 Craig Leres 65 Van Jacobson 66 67
README.sgi
1[I got the following very useful note from a user at SGI with some notes 2 on compiler problems. As nobody has ever mentioned these problems before, 3 I suspect that they are peculiar to the SGI C compiler. Perhaps these 4 notes will be helpful to others... 5 6 sdo - Fri Sep 18, 1998] 7 8 9Date: Mon, 14 Sep 1998 22:07:02 -0300 10From: Alejandro Saez <xxxxxxxxxxxx> 11Organization: Silicon Chile 12To: ostermann@cs.ohiou.edu 13Subject: IRIX problem solved 14 15Hi, 16 17[...] 18 19I compiled the program on a IRIX 6.2 SGI workstation. First of all, 20the SGI cc compiler didn't work basically because it doesn't accept 21(unlike gcc) unterminated strings for formated output functions (it 22forces you to have a long line) so this was a problem for the 23postscript generation bit. I installed gcc, and here a new problem 24arose. Some of your files (mfiles.c, tcptrace.c and plotter.c), 25includes and uses the stdarg.h include file. This file uses a SGI 26compiler built-in macro called __builtin_alignof, so when using gcc, 27ld would complain about not being able to resolve that symbol (makes 28sense, it's provided by cc). I was able to solve it by making a local 29copy of stdarg.h and changing ocurences of __builtin_alignof by 30__alignof__ which is a gcc extension. Of course I had to change 31#include <stdarg.h> for #include "stdarg.h" but the nice thing is it 32worked (well, it compiled and run with no arguments). I though you 33would like to hear about this. Hope comes in handy. 34 35 36------------------------------------------------------------------------ 37Alejandro Saez 38Software Engineer 39Silicon Chile S.A. 40 41------------------------------------------------------------ 42Mon Sep 21, 1998 43 44 45[...] After I got your e-mail I did a full search and realized that 46the gcc distribution included the stdarg.h file (they were pretty 47hidden too, and undocumented ) . Funny since I've compiled with gcc on 48other SGI boxes and always used SGI's includes, and it made sense, 49they are the STANDARD libraries, it never ocurred to me that I needed 50two pairs of standard library headers, until now that this one include 51depended on a compiler internal. So maybe is not a good idea to 52include the stuff in the notes, or at least say that it's only 53necessary if you are using the gcc compiler and SGI's header files, 54which of course doesn't make much sense. 55 56 57
README.tline_graphs
1README - Time Line Graphs 2 3NOTE: 4----- 5This code is lacking about a 1000 lines of intellegence that is needed 6to draw these graphs correctly. The basic problem we face is that we have 7the time values for the segments arriving/leaving on one end since the 8traffic dump is carried out on that end. The time values for the other end 9have to be estimated based on some heuristic. This requires a lot of 10intellegence and requires taking care of various conditions like 11retransmits, timeouts etc. The current heuristic is a simple one of 12adding/subtacting 1/3rd of the rtt. 13 14We started this project thinking it is easy to draw these graphs, and then 15realized that it is infact quite a complicated task. All this works with a 16-L option at command line, but may not accurately reflect the segment 17timings. 18 19We are currently working on fixing this problem and should be able to 20provide more accurate results in the near future. 21 22For tcptrace maintainers: 23------------------------- 24 25I have left the code in here as the starting point to work on. Whoever is 26working on this project would want to clean up this file trace.c (based on 27the diffs below), and continue development as a seperate module. 28 29Don't forget to update this file when this option is fully developed. 30 31--Avinash (alakhian@tcptrace.org) 329 July 2002 33 34------------------- 35 DIFFS - plotter.c 36------------------- 37 3868,75d67 39< Bool header_done; /* Flag indicating plotter header written to file */ 40< Bool axis_switched; /* Switch x & y axis types. 41< * (Needed for Time Line Charts, 42< * Default = FALSE) 43< */ 44< char *title; /* Plotter title */ 45< char *xlabel; /* Plotter x-axis label */ 46< char *ylabel; /* Plotter y-axis label */ 4791,92d82 48< static void WritePlotHeader(PLOTTER pl); 49< static void CallDoPlot(PLOTTER pl, char *plot_cmd, int plot_argc, ...); 5094a85,88 51> 52> 53> 54> 55114,119d107 56< struct plotter_info *ppi; 57< 58< ppi = &pplotters[pl]; 59< 60< /* see if we're graphing from "0" OR if the axis type is switched */ 61< if (graph_time_zero || ppi->axis_switched) { 62120a109,111 63> /* see if we're graphing from "0" */ 64> if (graph_time_zero) { 65> struct plotter_info *ppi = &pplotters[pl]; 66268c259 67< 68--- 69> 70273,276d263 71< 72< /* Write the plotter header if not already written */ 73< if(!ppi->header_done) 74< WritePlotHeader(pl); 75327a315,336 76> /* graph coordinates... */ 77> /* X coord is timeval unless graph_time_zero is true */ 78> /* Y is signed except when it's a sequence number */ 79> /* ugly hack -- unsigned makes the graphs hard to work with and is 80> only needed for the time sequence graphs */ 81> /* suggestion by Michele Clark at UNC - make them double instead */ 82> Mfprintf(f,"%s %s\n", 83> graph_time_zero?"dtime":"timeval", 84> ((strcmp(ylabel,"sequence number") == 0)&&(!graph_seq_zero))? 85> "double":"signed"); 86> 87> if (show_title) { 88> if (xplot_title_prefix) 89> Mfprintf(f,"title\n%s %s\n", 90> ExpandFormat(xplot_title_prefix), 91> title); 92> else 93> Mfprintf(f,"title\n%s\n", title); 94> } 95> Mfprintf(f,"xlabel\n%s\n", xlabel); 96> Mfprintf(f,"ylabel\n%s\n", ylabel); 97> 98331,338c340 99< ppi->axis_switched = FALSE; 100< ppi->header_done = FALSE; 101< 102< /* Save these fields to be writtn to the plotter header later in DoPlot() */ 103< ppi->title = strdup(title); 104< ppi->xlabel = strdup(xlabel); 105< ppi->ylabel = strdup(ylabel); 106< 107--- 108> 109369,373c371 110< 111< /* Write the plotter header if not already written */ 112< if(!ppi->header_done) 113< WritePlotHeader(pl); 114< 115--- 116> 117424,425c422,423 118< if (colorplot) 119< CallDoPlot(pl, color, 0); 120--- 121> if (colorplot) 122> DoPlot(pl,"%s",color); 123437c435,437 124< CallDoPlot(pl,"line", 4, t1, x1, t2, x2); 125--- 126> DoPlot(pl,"line %s %u %s %u", 127> xp_timestamp(pl,t1), x1, 128> xp_timestamp(pl,t2), x2); 129449c449,451 130< CallDoPlot(pl,"dline", 4, t1, x1, t2, x2); 131--- 132> DoPlot(pl,"dline %s %u %s %u", 133> xp_timestamp(pl,t1), x1, 134> xp_timestamp(pl,t2), x2); 135459c461 136< CallDoPlot(pl,"diamond", 2, t, x); 137--- 138> DoPlot(pl,"diamond %s %u", xp_timestamp(pl,t), x); 139469c471 140< CallDoPlot(pl,"dot", 2, t, x); 141--- 142> DoPlot(pl,"dot %s %u", xp_timestamp(pl,t), x); 143479c481 144< CallDoPlot(pl,"plus", 2, t, x); 145--- 146> DoPlot(pl,"plus %s %u", xp_timestamp(pl,t), x); 147489c491 148< CallDoPlot(pl,"box", 2, t, x); 149--- 150> DoPlot(pl,"box %s %u", xp_timestamp(pl,t), x); 151501,503c503 152< char arrow_type[7]; 153< snprintf(arrow_type, sizeof(arrow_type), "%carrow", dir); 154< CallDoPlot(pl, arrow_type, 2, t, x); 155--- 156> DoPlot(pl,"%carrow %s %u", dir, xp_timestamp(pl,t), x); 157554,556c554 158< char tick_type[6]; 159< snprintf(tick_type, sizeof(tick_type), "%ctick", dir); 160< CallDoPlot(pl, tick_type, 2, t, x); 161--- 162> DoPlot(pl,"%ctick %s %u", dir, xp_timestamp(pl,t), x); 163643,646c641 164< char text_type[6]; 165< snprintf(text_type, sizeof(text_type), "%stext", where); 166< 167< CallDoPlot(pl, text_type, 2, t, x); 168--- 169> DoPlot(pl,"%stext %s %u", where, xp_timestamp(pl,t), x); 170653c648 171< CallDoPlot(pl, str, 0); 172--- 173> DoPlot(pl,"%s", str); 174656,663d650 175< void 176< plotter_invisible( 177< PLOTTER pl, 178< struct timeval t, 179< u_long x) 180< { 181< CallDoPlot(pl,"invisible", 2, t, x); 182< } 183665d651 184< 185768,925d753 186< /* This function may be called with 0, 2 or 4 arguments depending on plot command. 187< * case 0: 188< * The arguments t1, x1, t2, x2 do not hold any valid values, and are not used. 189< * case 2: 190< * Arguments t2 and x2 are the same as arguments t1 and x1. Only t1 and x1 are used. 191< * case 4: 192< * All arguments are valid and are used. 193< */ 194< static void 195< CallDoPlot( 196< PLOTTER pl, 197< char *plot_cmd, 198< int plot_argc, 199< ...) 200< { 201< struct timeval t1; 202< u_long x1; 203< struct timeval t2; 204< u_long x2; 205< va_list ap; 206< struct plotter_info *ppi; 207< char fmt[200]; 208< 209< if (pl == NO_PLOTTER) 210< return; 211< 212< if (pl > plotter_ix) { 213< fprintf(stderr,"Illegal plotter: %d\n", pl); 214< exit(-1); 215< } 216< 217< ppi = &pplotters[pl]; 218< 219< /* Get the arguments from the variable list */ 220< va_start(ap, plot_argc); 221< if(plot_argc > 0) 222< { 223< t1 = va_arg(ap, struct timeval); 224< x1 = va_arg(ap, u_long); 225< } 226< if(plot_argc > 2) 227< { 228< t2 = va_arg(ap, struct timeval); 229< x2 = va_arg(ap, u_long); 230< } 231< va_end(ap); 232< 233< if(ppi->axis_switched) { 234< switch(plot_argc) { 235< case 0: 236< snprintf(fmt, sizeof(fmt), "%s%c", plot_cmd, NULL); 237< DoPlot(pl, fmt); 238< break; 239< case 2: 240< snprintf(fmt, sizeof(fmt), "%s %%u -%%s%c", plot_cmd, NULL); 241< DoPlot(pl, fmt, 242< x1, xp_timestamp(pl,t1)); 243< break; 244< case 4: 245< snprintf(fmt, sizeof(fmt), "%s %%u -%%s %%u -%%s%c", plot_cmd, NULL); 246< DoPlot(pl, fmt, 247< x1, xp_timestamp(pl,t1), 248< x2, xp_timestamp(pl,t2)); 249< break; 250< default: 251< fprintf(stderr, "CallDoPlot: Illegal number of arguments (%d)\n", plot_argc); 252< } 253< } 254< else { 255< switch(plot_argc) { 256< case 0: 257< snprintf(fmt, sizeof(fmt), "%s%c", plot_cmd, NULL); 258< DoPlot(pl, fmt); 259< break; 260< case 2: 261< snprintf(fmt, sizeof(fmt), "%s %%s %%u%c", plot_cmd, NULL); 262< DoPlot(pl, fmt, 263< xp_timestamp(pl,t1), x1); 264< break; 265< case 4: 266< snprintf(fmt, sizeof(fmt), "%s %%s %%u %%s %%u%c", plot_cmd, NULL); 267< DoPlot(pl, fmt, 268< xp_timestamp(pl,t1), x1, 269< xp_timestamp(pl,t2), x2); 270< break; 271< default: 272< fprintf(stderr, "CallDoPlot: Illegal number of arguments (%d)\n", plot_argc); 273< } 274< } 275< 276< return; 277< } 278< 279< static void 280< WritePlotHeader( 281< PLOTTER pl) 282< { 283< MFILE *f = NULL; 284< struct plotter_info *ppi; 285< 286< if (pl == NO_PLOTTER) 287< return; 288< 289< if (pl > plotter_ix) { 290< fprintf(stderr,"Illegal plotter: %d\n", pl); 291< exit(-1); 292< } 293< 294< ppi = &pplotters[pl]; 295< 296< if ((f = ppi->fplot) == NULL) 297< return; 298< 299< if(ppi->axis_switched) { 300< /* Header for the Time Line Charts */ 301< Mfprintf(f,"%s %s\n", "unsigned", "dtime"); 302< } 303< else { 304< /* Header for all other plots */ 305< /* graph coordinates... */ 306< /* X coord is timeval unless graph_time_zero is true */ 307< /* Y is signed except when it's a sequence number */ 308< /* ugly hack -- unsigned makes the graphs hard to work with and is 309< only needed for the time sequence graphs */ 310< /* suggestion by Michele Clark at UNC - make them double instead */ 311< Mfprintf(f,"%s %s\n", 312< graph_time_zero?"dtime":"timeval", 313< ((strcmp(ppi->ylabel,"sequence number") == 0)&&(!graph_seq_zero))? 314< "double":"signed"); 315< } 316< 317< if (show_title) { 318< if (xplot_title_prefix) 319< Mfprintf(f,"title\n%s %s\n", 320< ExpandFormat(xplot_title_prefix), 321< ppi->title); 322< else 323< Mfprintf(f,"title\n%s\n", ppi->title); 324< } 325< 326< Mfprintf(f,"xlabel\n%s\n", ppi->xlabel); 327< Mfprintf(f,"ylabel\n%s\n", ppi->ylabel); 328< 329< /* Indicate that the header has now been written to the plotter file */ 330< ppi->header_done = TRUE; 331< 332< return; 333< } 334< 335< /* Switch the x and y axis type (Needed for Time Line Charts. Default = FLASE) */ 336< void plotter_switch_axis( 337< PLOTTER pl, 338< Bool flag) 339< { 340< struct plotter_info *ppi = &pplotters[pl]; 341< 342< ppi->axis_switched = flag; 343< } 344 345-------------------- 346 DIFFS - tcptrace.h 347-------------------- 348 349450,452d449 350< /* Time Line Graph */ 351< PLOTTER tline_plotter; 352< 353634d630 354< extern Bool graph_tline; 355744,746c740 356< void plotter_nothing(PLOTTER, timeval); 357< void plotter_invisible(PLOTTER, timeval, u_long); 358< void plotter_switch_axis(PLOTTER, Bool); 359--- 360> void plotter_nothing(PLOTTER pl, struct timeval t); 361991d984 362< #define TLINE_FILE_EXTENSION "_tline.xpl" 363 364-------------------- 365 DIFFS - tcptrace.c 366-------------------- 367 368107d106 369< Bool graph_tline = FALSE; 370531d529 371< -L create time line graph[s]\n\ 3721800d1797 373< graph_tline = TRUE; 3741802,1804d1798 375< case 'L': graph_tline = TRUE; 376< fprintf(stderr, "\nWarning: You have chosen the option '-L' to plot Time Line Graphs.\n This option is yet under development and may not reflect accurate results.\n Please take a look at the file README.tline_graphs for more details.\n\n"); 377< break; 3781927d1920 379< case 'L': graph_tline = !TRUE; break; 3801998a1992 381> fprintf(stderr,"graph tsg: %s\n", BOOL2STR(graph_tsg)); 3822001,2004d1994 383< fprintf(stderr,"graph tsg: %s\n", BOOL2STR(graph_tsg)); 384< fprintf(stderr,"graph segsize: %s\n", BOOL2STR(graph_segsize)); 385< fprintf(stderr,"graph owin: %s\n", BOOL2STR(graph_owin)); 386< fprintf(stderr,"graph tline: %s\n", BOOL2STR(graph_tline)); 387 388 389----------------- 390 DIFFS - trace.c 391----------------- 392 39374,75d73 394< static int tline_left = 0; /* left and right time lines for the time line charts */ 395< static int tline_right = 0; 396138,140d135 397< char *a2b_seg_color = "green"; /* colors for segments on the time line chart */ 398< char *b2a_seg_color = "yellow"; 399< 400470,521d464 401< /* init time line graphs (Avinash, 2 July 2002) */ 402< ptp->a2b.tline_plotter = ptp->b2a.tline_plotter = NO_PLOTTER; 403< if (graph_tline && !ptp->ignore_pair) { 404< if (!ignore_non_comp || (SYN_SET(ptcp))) { 405< /* We don't want the standard a2b type name so we will specify 406< * a filename of type a_b when we call new_plotter. 407< */ 408< char filename[25]; 409< snprintf(filename,sizeof(filename),"%s_%s", 410< ptp->a2b.host_letter, ptp->a2b.ptwin->host_letter); 411< 412< snprintf(title,sizeof(title),"%s_==>_%s (time line graph)", 413< ptp->a_endpoint, ptp->b_endpoint); 414< /* We will keep both the plotters the same since we want all 415< * segments going in either direction to be plotted on the same 416< * graph 417< */ 418< ptp->a2b.tline_plotter = ptp->b2a.tline_plotter = 419< new_plotter(&ptp->a2b,filename,title, 420< "segments", 421< "relative time", 422< TLINE_FILE_EXTENSION); 423< 424< /* Switch the x & y axis types. 425< * The default is x - timeval, y - unsigned, 426< * we need x - unsigned, y - dtime. 427< * Both the plotters are the same so we will 428< * only call this function once. 429< */ 430< plotter_switch_axis(ptp->a2b.tline_plotter, TRUE); 431< 432< /* set graph zero points */ 433< plotter_nothing(ptp->a2b.tline_plotter, current_time); 434< plotter_nothing(ptp->b2a.tline_plotter, current_time); 435< 436< /* Some graph initializations 437< * Generating a drawing space between x=0-100. 438< * The time lines will be at x=40 for source, x=60 for destination. 439< * Rest of the area on either sides will be used to print segment 440< * information. 441< * 442< * seg info |----->| 443< * |<-----| seg info 444< */ 445< tline_left = 40; 446< tline_right = 60; 447< plotter_invisible(ptp->a2b.tline_plotter, current_time, 0); 448< plotter_invisible(ptp->a2b.tline_plotter, current_time, 100); 449< } 450< } 451< 452< 4531159d1101 454< PLOTTER tlinepl; 4551412,1414d1353 456< 457< /* plotter shorthand (NOTE: we are using one plotter for both directions) */ 458< tlinepl = thisdir->tline_plotter; 4591415a1355 460> 4611726,1861c1666 462< } 463< 464< /* graph time line */ 465< /* Since the axis types have been switched specially for these graphs, 466< * x is actually used as y and y as x 467< * -Avinash. 468< * 469< * NOTE: This code is lacking about a 1000 lines of intellegence that is needed 470< * ----- to draw these graphs correctly. I have left it in here as the starting 471< * point to work on. Whoever is working on this project would want to clean 472< * up this file trace.c (based on the patches in the README.tline_graphs 473< * file), and continue development as a seperate module. We started this 474< * project thinking it is easy to draw these graphs, and then realized that 475< * it is infact quite a complicated task. All this works with a -L option at 476< * command line. 477< */ 478< if (tlinepl != NO_PLOTTER) { 479< char buf1[200]; 480< char buf2[50]; 481< static seqnum a2b_first_seqnum = 0; 482< static seqnum b2a_first_seqnum = 0; 483< /* 1/3rd rtt. Since we have the timestamps only on one side, we calculate the 484< * arrrival/departure time of the segments on the other side by adding/subtracting 485< * 1/3rd rtt. We assume that it takes 1/3rd time for the segment to travel in 486< * either direction, and 1/3rd time for processing. 487< * We also skew the calculated times so that the acks are not seen before the 488< * segments actually arrive. 489< */ 490< struct timeval one3rd_rtt; 491< struct timeval copy_current_time; 492< /* Make a copy of the current time (Needed for calculations) */ 493< copy_current_time.tv_sec = current_time.tv_sec; 494< copy_current_time.tv_usec = current_time.tv_usec; 495< /* Compute 1/3rd rtt */ 496< one3rd_rtt.tv_sec = 0; 497< one3rd_rtt.tv_usec = thisdir->rtt_last/3; 498< /* Adjust seconds and microseconds */ 499< while(one3rd_rtt.tv_usec >= US_PER_SEC) { 500< one3rd_rtt.tv_usec -= US_PER_SEC; 501< one3rd_rtt.tv_sec += 1; 502< } 503< 504< /* Initializations */ 505< memset(&buf1, 0, sizeof(buf1)); 506< memset(&buf2, 0, sizeof(buf2)); 507< 508< /* Segment information */ 509< /* Check the flags */ 510< if(SYN_SET(ptcp)) 511< strncat(buf1, "SYN ", 4); 512< if(FIN_SET(ptcp)) 513< strncat(buf1, "FIN ", 4); 514< if(RESET_SET(ptcp)) 515< strncat(buf1, "RST ", 4); 516< if(PUSH_SET(ptcp)) 517< strncat(buf1, "PSH ", 4); 518< if(URGENT_SET(ptcp)) 519< strncat(buf1, "URG ", 4); 520< 521< 522< /* Write the sequence numbers */ 523< if(dir == A2B) { 524< /* Use relative sequence numbers after the first segment in either direction */ 525< snprintf(buf2, sizeof(buf2), "%u:%u(%u) %c", (start - a2b_first_seqnum), 526< (end - a2b_first_seqnum), (end-start), NULL); 527< strncat(buf1, buf2, strlen(buf2)); 528< if(a2b_first_seqnum == 0 && !SYN_SET(ptcp)) // Don't use relative sequence numbers until handshake is complete. 529< a2b_first_seqnum = thisdir->min_seq; 530< }else if(dir == B2A) { 531< /* Use relative sequence numbers after the first segment in either direction */ 532< snprintf(buf2, sizeof(buf2), "%u:%u(%u) %c", (start - b2a_first_seqnum), 533< (end - b2a_first_seqnum), (end-start), NULL); 534< strncat(buf1, buf2, strlen(buf2)); 535< if(b2a_first_seqnum == 0 && !SYN_SET(ptcp)) 536< b2a_first_seqnum = thisdir->min_seq; 537< } 538< 539< /* Acknowledgements */ 540< if(ACK_SET(ptcp)) { 541< memset(&buf2, 0, sizeof(buf2)); 542< if(dir == A2B) 543< snprintf(buf2, sizeof(buf2), "ack %u %c", (th_ack - b2a_first_seqnum), NULL); 544< else if(dir == B2A) 545< snprintf(buf2, sizeof(buf2), "ack %u %c", (th_ack - a2b_first_seqnum), NULL); 546< strncat(buf1, buf2, strlen(buf2)); 547< } 548< 549< /* Advertised Window */ 550< memset(&buf2, 0, sizeof(buf2)); 551< snprintf(buf2, sizeof(buf2), "win %u %c", eff_win,NULL); 552< strncat(buf1, buf2, strlen(buf2)); 553< 554< /* Retransmits */ 555< if(retrans) { 556< memset(&buf2, 0, sizeof(buf2)); 557< snprintf(buf2, sizeof(buf2), "R %c", NULL); 558< strncat(buf1, buf2, strlen(buf2)); 559< } 560< 561< /* Hardware Duplicates */ 562< if(hw_dup) { 563< memset(&buf2, 0, sizeof(buf2)); 564< snprintf(buf2, sizeof(buf2), "HD %c", NULL); 565< strncat(buf1, buf2, strlen(buf2)); 566< } 567< 568< /* Draw the segment ------>/<------- */ 569< if(dir == A2B) { 570< tv_add(©_current_time, one3rd_rtt); 571< plotter_line(tlinepl, ptp_save->first_time, tline_left, copy_current_time, tline_left); 572< plotter_line(tlinepl, ptp_save->first_time, tline_right, copy_current_time, tline_right); 573< if(SYN_SET(ptcp)|| FIN_SET(ptcp) || RESET_SET(ptcp)) 574< plotter_perm_color(tlinepl, synfin_color); 575< else 576< plotter_perm_color(tlinepl, a2b_seg_color); 577< plotter_line(tlinepl, current_time, tline_left, copy_current_time, tline_right); 578< plotter_rarrow(tlinepl, copy_current_time, tline_right); 579< plotter_perm_color(tlinepl, default_color); 580< plotter_text(tlinepl, current_time, tline_left, "l", buf1); 581< } 582< else if(dir == B2A) { 583< tv_sub(©_current_time, one3rd_rtt); 584< plotter_line(tlinepl, ptp_save->first_time, tline_left, copy_current_time, tline_left); 585< plotter_line(tlinepl, ptp_save->first_time, tline_right, copy_current_time, tline_right); 586< if(SYN_SET(ptcp)|| FIN_SET(ptcp) || RESET_SET(ptcp)) 587< plotter_perm_color(tlinepl, synfin_color); 588< else 589< plotter_perm_color(tlinepl, b2a_seg_color); 590< plotter_line(tlinepl, copy_current_time, tline_right, current_time, tline_left); 591< plotter_larrow(tlinepl, current_time, tline_left); 592< plotter_perm_color(tlinepl, default_color); 593< plotter_text(tlinepl, copy_current_time, tline_right, "r", buf1); 594< } 595< 596< } 597< 598--- 599> } 600
README.tput_graphs
1 2>> When I plot a2b_tput.xpl I get two curves, one red and one blue 3>> plus the yellow dots for packets. What is not clear for me is what 4>> are the blue and red curves represents with respect to throughput? 5 6Sorry, that stuff hasn't been documented very well, partly because I'm 7not sure how to display it more clearly, but here's what it means: 8 9The yellow dots are the instantaneous throughput samples. They're 10calculated by using the time since the last segment for the connection 11and the size of the current segment to get bytes/second for this 12sample. 13 14The red line is the result of averaging together multiple yellow 15dots. By default (see -A), the red line uses the last 10 segments to 16calculate a throughput. Higher -A values give smoother curves. 17 18The blue line is simply a running average throughput from the 19beginning of the transfer, and it's final value is the same as what is 20reported for the connection's transfer rate. 21 22Hope that helps. As I said, I'm not really sure what should be on 23this graph. What's there is the stuff that we've wanted here locally, 24but I'd be glad to hear other ideas! 25 26Shawn 27
README.tru64
1Fri May 25, 2001 2 3The version 6 beta version mostly compiles fine on Tru64/Alpha 4machines with the following exceptions: 5 61) You need to modify tcptrace.h to find the unusual definitions that 7 Tru64 uses for the bit-field level TCP and IP fields 8 9#define IP_HL(pip) ((pip)->ip_vhl&0xf) 10#define IP_V(pip) ((pip)->ip_vhl>>4) 11#define TH_X2(ptcp) ((ptcp)->th_xoff&0xf) 12#define TH_OFF(ptcp) ((ptcp)->th_xoff>>4) 13 142) the NS module can't handle those, so you'll need to remove 15 "-DGROK_NS" from the Makefile (which will remove NS input file support) 16 17
README.version
1README.version: convention used for version numbers, 2 and release instructions 3 4Convention followed for version numbers: 5---------------------------------------- 6 7Starting with release 6.2.0 of tcptrace, we will be using version 8numbers similar to those used for linux software. Following is the 9convention followed for version numbers of the form x.y.z: 10 11 - 'z' changes for small bug fixes 12 13 - 'y' changes for certain feature enhancements and reasonably large 14 modifications. Also, even numbers indicate stable release and 15 odd numbers are for development versions 16 17 - 'x' changes when a whole lot has changed since the previous release 18 19 20Release Instructions: 21--------------------- 22 23NOTE: Stable release in this example : 6.4.0 24----- Development version that follows : 6.5.0 25 26~/tcptrace-cvs$ cvs tag release-6_4_0 27~/tcptrace-cvs$ cd 28~$ cvs export -d tcptrace-6.4.0 -r release-6_4_0 tcptrace 29~$ tar cf tcptrace-6.4.0.tar tcptrace-6.4.0 30 31etc. to create the build. 32 33After that, go back to the tcptrace cvs workspace and *immediately* do the 34following: 35 36~/tcptrace-cvs$ cvs tag start-6_5 37~/tcptrace-cvs$ cvs tag -b branch-6_5 38 39Then modify the two branches appropriately: 40 41*FOR BUG FIXES* 42^^^^^^^^^^^^^^^ 43~/$ cvs co -d tcptrace-stable tcptrace 44(change to *6.4.1, 6.4.2* etc. for each bug fixed and check in) 45 46*FOR NEW FEATURE DEVELOPMENT* 47^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 48~/$ cvs co -d tcptrace-devel -r branch-6_5 tcptrace 49(change to *6.5.0* and check in) 50 51Now anyone checking out 'tcptrace' with no args will get the 52current *stable* branch (bug-fixes only), and anyone checking out with 53'-r branch-6_5' would get the current development version with all of its 54glorious new features, etc. 55 56Version numbers then go on as 6.4.1, 6.4.2 bug-fixes and, 576.5.1, 6.5.2 etc for development versions until released as 6.6.0 or 7.0.0, 58depending on magnitude of development. 59 60--Avinash Lakhiani (alakhian@tcptrace.org) 61--Ethan Blanton (eblanton@tcptrace.org) 62 27 Jul 2002 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
README.xpl2gpl
1Introduction: 2------------- 3xpl2gpl is a utility that converters tcptrace-style xplot input to gnuplot input. 4This converter gives a nearly perfect gnuplot reproduction of the corresponding 5xplot graph. 6 7Installation: 8------------- 9Simply copy the script file xpl2gpl to a system-wide area like /bin, /usr/bin, 10/usr/local/bin or any other suitable location if you wish to make it available to 11all users. 12 13Usage: 14------ 15xpl2gpl [-s] <file_name[.xpl]> 16 17This would produce files by the names "file_name.gpl", "file_name.datasets" and 18"file_name.labels". 19Load the file "file_name.gpl" in gnuplot and it should give you the plot. The 20contents of the other files are as follows: 21"file_name.datasets" : contains all the plotting coordinates. 22"file_name.labels : contains all the labels of the plot. 23 24"file_name.ps" is the postscript version of the plot that is created when the 25file "file_name.gpl" is loaded in gnuplot. 26 27 28Options: 29-------- 30-s : seperate files (for expert users) 31 32If you wish to plot only some data from the xpl file, you may use the -s (seperate 33files) option which generates a bunch of data-files filtered based on the color 34and plotting style. 35 36Look at the xplot version of the plot, and based upon the color and style, you may 37alter the corresponding lines in the ".gpl" file, for whatever data you want to 38alter in the plot. 39 40 41On behalf of Dr. Shawn Ostermann, 42 43Avinash Lakhiani 44Email: avinash.lakhiani@ohiou.edu 45Ohio University. 46 47Jun 18, 2001 48 49