File: tcp.awk

package info (click to toggle)
ns2 2.35%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 78,796 kB
  • sloc: cpp: 172,923; tcl: 107,130; perl: 6,391; sh: 6,143; ansic: 5,846; makefile: 816; awk: 525; csh: 355
file content (157 lines) | stat: -rw-r--r-- 5,516 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
BEGIN {
	if (dir == "")
		dir = ".";
}	

{
time = $2;
saddr = $4;
sport = $6;
daddr = $8;
dport = $10;
hiack = $14;
cwnd = $18;
ssthresh = $20;
srtt = $26;
rttvar = $28;
ownd = $34;
owndcorr = $36;
nrexmit = $38;

if (!((saddr, sport, daddr, dport) in starttime)) {
	starttime[saddr, sport, daddr, dport] = time;
	ind[saddr, sport, daddr, dport] = sprintf("%s,%s-%s,%s", saddr, sport, daddr, dport);
}
if ((cwnd >= 100) && (!((saddr, sport, daddr, dport) in cwndtime))) {
	cwndtime[saddr, sport, daddr, dport] = time;
	cwndhiack[saddr, sport, daddr, dport] = hiack;
}

if ((time >= mid) && (!((saddr, sport, daddr, dport) in middletime))) {
	middletime[saddr, sport, daddr, dport] = time;
	middlehiack[saddr, sport, daddr, dport] = hiack;
}

if ((time >= turnon) && (!((saddr, sport, daddr, dport) in turnontime))) {
	turnontime[saddr, sport, daddr, dport] = time;
	turnonhiack[saddr, sport, daddr, dport] = hiack;
}

if (time <= turnoff) {
	turnofftime[saddr, sport, daddr, dport] = time;
	turnoffhiack[saddr, sport, daddr, dport] = hiack;
	numrexmit[saddr, sport, daddr, dport] = nrexmit;
}

endtime[saddr, sport, daddr, dport] = time;
highest_ack[saddr, sport, daddr, dport] = hiack;


if (!((saddr, sport, daddr, dport) in cwndfile)) {
	cwndfile[saddr, sport, daddr, dport] = sprintf("%s/cwnd-%d,%d-%d,%d.out", dir, saddr, sport, daddr, dport);
	printf "TitleText: (%d,%d)->(%d,%d)\n", saddr, sport, daddr, dport > cwndfile[saddr,sport,daddr,dport];
	printf "Device: Postscript\n" > cwndfile[saddr,sport,daddr,dport];
}
if (!((saddr, sport, daddr, dport) in ssthreshfile)) {
	ssthreshfile[saddr, sport, daddr, dport] = sprintf("%s/ssthresh-%d,%d-%d,%d.out", dir, saddr, sport, daddr, dport);
	printf "TitleText: (%d,%d)->(%d,%d)\n", saddr, sport, daddr, dport > ssthreshfile[saddr,sport,daddr,dport];
	printf "Device: Postscript\n" > ssthreshfile[saddr,sport,daddr,dport];
}
if (!((saddr, sport, daddr, dport) in owndfile)) {
	owndfile[saddr, sport, daddr, dport] = sprintf("%s/ownd-%d,%d-%d,%d.out", dir, saddr, sport, daddr, dport);
	printf "TitleText: (%d,%d)->(%d,%d)\n", saddr, sport, daddr, dport > owndfile[saddr,sport,daddr,dport];
	printf "Device: Postscript\n" > owndfile[saddr,sport,daddr,dport];
}
if (!((saddr, sport, daddr, dport) in owndcorrfile)) {
	owndcorrfile[saddr, sport, daddr, dport] = sprintf("%s/owndcorr-%d,%d-%d,%d.out", dir, saddr, sport, daddr, dport);
	printf "TitleText: (%d,%d)->(%d,%d)\n", saddr, sport, daddr, dport > owndcorrfile[saddr,sport,daddr,dport];
	printf "Device: Postscript\n" > owndcorrfile[saddr,sport,daddr,dport];
}
if (!((saddr, sport, daddr, dport) in srttfile)) {
	srttfile[saddr, sport, daddr, dport] = sprintf("%s/srtt-%d,%d-%d,%d.out", dir, saddr, sport, daddr, dport);
	printf "TitleText: (%d,%d)->(%d,%d)\n", saddr, sport, daddr, dport > srttfile[saddr,sport,daddr,dport];
	printf "Device: Postscript\n" > srttfile[saddr,sport,daddr,dport];
}
if (!((saddr, sport, daddr, dport) in rttvarfile)) {
	rttvarfile[saddr, sport, daddr, dport] = sprintf("%s/rttvar-%d,%d-%d,%d.out", dir, saddr, sport, daddr, dport);
	printf "TitleText: (%d,%d)->(%d,%d)\n", saddr, sport, daddr, dport > rttvarfile[saddr,sport,daddr,dport];
	printf "Device: Postscript\n" > rttvarfile[saddr,sport,daddr,dport];
}

printf "%g %g\n", time, cwnd > cwndfile[saddr, sport, daddr, dport];
printf "%g %d\n", time, ssthresh > ssthreshfile[saddr, sport, daddr, dport];
printf "%g %d\n", time, ownd > owndfile[saddr, sport, daddr, dport];
printf "%g %d\n", time, owndcorr > owndcorrfile[saddr, sport, daddr, dport];
printf "%g %g\n", time, srtt > srttfile[saddr, sport, daddr, dport];
printf "%g %g\n", time, rttvar > rttvarfile[saddr, sport, daddr, dport];
1} 
END {
	for (f in cwndfile) {
		close(cwndfile[f]);
	}
	for (f in ssthreshfile) {
		close(ssthreshfile[f]);
	}
	for (f in owndfile) {
		close(owndfile[f]);
	}
	for (f in owndcorrfile) {
		close(owndcorrfile[f]);
	}
	for (f in srttfile) {
		close(srttfile[f]);
	}
	for (f in rttvarfile) {
		close(rttvarfile[f]);
	}
 	for (i in starttime) {
		if (endtime[i] == starttime[i]) 
			print starttime[i], endtime[i], highest_ack[i];
		bw = calc_bw(0,highest_ack[i],starttime[i],endtime[i]);
# 		bw = (highest_ack[i]/(endtime[i] - starttime[i]))*8.0;
#		duration = endtime[i] - starttime[i];
		duration = 15;
		if (i in cwndtime) {
			ss_bw = calc_bw(cwndhiack[i],highest_ack[i],cwndtime[i],endtime[i]);
#			ss_bw = ((highest_ack[i] - cwndhiack[i])/(endtime[i] - cwndtime[i]))*8.0;
			ss_starttime = cwndtime[i] - starttime[i];
		}
		else {
			ss_bw = -1;
			ss_starttime = -1;
		}
		if (i in middletime) {
			sh_bw = calc_bw(middlehiack[i],highest_ack[i],middletime[i],endtime[i]);
#			sh_bw = ((highest_ack[i] - middlehiack[i])/(endtime[i] - middletime[i]))*8.0;
		}
		else {
			sh_bw = -1;
		}
		on_bw = -1;
		if (i in turnontime) {
			if (turnontime[i] < turnofftime[i]) {
#				on_bw = calc_bw(turnonhiack[i],turnoffhiack[i],turnontime[i],turnofftime[i]);
				on_bw = calc_bw(turnonhiack[i],turnoffhiack[i],turnon,turnoff);
#				on_bw = ((turnoffhiack[i] - turnonhiack[i])/(turnofftime[i] - turnontime[i]))*8.0;
			}
		}
 		print ind[i], duration, bw, ss_starttime, ss_bw, sh_bw, on_bw > "thruput";
		print ind[i], numrexmit[i] > "numrexmit";
 	}
	close("thruput");
	close("numrexmit");
	for (i in ind) {
		print ind[i] > "index.out"
			}
	close("index.out");

}

function calc_bw(startseq, endseq, starttime, endtime) {
	if (endtime > starttime ) {
		return ((endseq-startseq)*8.0/(endtime-starttime));
	}
	else {
		return -1;
	}
}