[ Martín Ferrari ]
[ Debian Janitor ]
New upstream snapshot.
Debian Janitor
2 years ago
0 | *.py[cod] | |
1 | ||
2 | # C extensions | |
3 | *.so | |
4 | ||
5 | # Packages | |
6 | *.egg | |
7 | *.egg-info | |
8 | dist | |
9 | build | |
10 | eggs | |
11 | parts | |
12 | bin | |
13 | var | |
14 | sdist | |
15 | develop-eggs | |
16 | .installed.cfg | |
17 | lib | |
18 | lib64 | |
19 | __pycache__ | |
20 | ||
21 | # Installer logs | |
22 | pip-log.txt | |
23 | ||
24 | # Unit test / coverage reports | |
25 | .coverage | |
26 | .tox | |
27 | nosetests.xml | |
28 | ||
29 | # Translations | |
30 | *.mo | |
31 | ||
32 | # Mr Developer | |
33 | .mr.developer.cfg | |
34 | .project | |
35 | .pydevproject |
0 | BUILDING.md | |
1 | COPYING | |
2 | docs/protocol.txt | |
3 | docs/sample-api.txt | |
4 | docs/X11Forwarding.md | |
5 | examples/sample.py | |
6 | Makefile | |
7 | README.md | |
8 | setup.cfg | |
9 | setup.py | |
10 | src/nemu/environ.py | |
11 | src/nemu/__init__.py | |
12 | src/nemu/interface.py | |
13 | src/nemu/iproute.py | |
14 | src/nemu/node.py | |
15 | src/nemu/protocol.py | |
16 | src/nemu/subprocess_.py | |
17 | test/test_core.py | |
18 | test/test_interfaces.py | |
19 | test/test_node.py | |
20 | test/test_protocol.py | |
21 | test/test_routing.py | |
22 | test/test_subprocess.py | |
23 | test/test_switch.py | |
24 | test/test_util.py | |
25 | TODO.md |
0 | Metadata-Version: 1.0 | |
1 | Name: nemu | |
2 | Version: 0.3.1 | |
3 | Summary: A lightweight network emulator embedded in a small python library. | |
4 | Home-page: https://github.com/NightTsarina/nemu | |
5 | Author: Martina Ferrari, Alina Quereilhac | |
6 | Author-email: tina@tina.pm, aquereilhac@gmail.com | |
7 | License: GPLv2 | |
8 | Description: UNKNOWN | |
9 | Platform: Linux |
0 | # vim: ts=4:sw=4:et:ai:sts=4 | |
1 | ||
2 | import csv, StringIO, subprocess | |
3 | ||
4 | class Graph: | |
5 | [LINE, DOT, POINT, LINEPOINT] = range(0, 4) | |
6 | def __init__(self): | |
7 | self._plots = [] | |
8 | self._title = None | |
9 | def set_title(self, title): | |
10 | self._title = title | |
11 | def add(self, plot): | |
12 | self._plots.append(plot) | |
13 | def generate(self, output_file): | |
14 | lines = self.gen_output() | |
15 | lines.insert(0, "set terminal postscript") | |
16 | lines.insert(0, "set output '%s'" % filename) | |
17 | gnuplot = subprocess.Popen(['gnuplot', '-'], | |
18 | stdin = subprocess.PIPE, | |
19 | stdout = subprocess.PIPE, | |
20 | stderr = subprocess.STDOUT) | |
21 | gnuplot.communicate(input = "\n".join(lines)) | |
22 | def Xplot(self, plotnr): | |
23 | lines = self.gen_output(plotnr) | |
24 | lines.insert(0, "set terminal wxt") | |
25 | lines.append('pause mouse') | |
26 | gnuplot = subprocess.Popen(['gnuplot', '-'], stdin = subprocess.PIPE) | |
27 | gnuplot.communicate(input = "\n".join(lines)) | |
28 | def _style_to_str(self, style): | |
29 | d = {Graph.LINE: 'lines', Graph.DOT: 'dots', Graph.POINT: 'points', | |
30 | Graph.LINEPOINT: 'linespoints'} | |
31 | return d[style] | |
32 | def gen_output(self, plots = None): | |
33 | if plots: | |
34 | plots = map(self._plots.__getitem__, plots) | |
35 | else: | |
36 | plots = self._plots | |
37 | lines = [] | |
38 | if self._title: | |
39 | lines.append("set title '%s'" % self._title) | |
40 | line = [] | |
41 | for plot in plots: | |
42 | line.append("'-' title '%s' with %s" % (plot.title(), | |
43 | self._style_to_str(plot.style()))) | |
44 | lines.append('plot ' + ', '.join(line)) | |
45 | for plot in plots: | |
46 | for r in plot.data(): | |
47 | r = [str(d) for d in r] | |
48 | lines.append(' '.join(r)) | |
49 | lines.extend(['e']) | |
50 | return lines | |
51 | ||
52 | class Plot: | |
53 | def __init__(self, title, data, style = Graph.LINE): | |
54 | self._title = title | |
55 | self._data = data | |
56 | self._style = style | |
57 | def style(self): | |
58 | return self._style | |
59 | def title(self): | |
60 | return self._title | |
61 | def data(self): | |
62 | return self._data | |
63 | ||
64 | class Row: | |
65 | def __init__(self, data, names = None): | |
66 | assert not names or len(names) == len(data) | |
67 | assert not names or all(map(lambda x: isinstance(x, str), names)) | |
68 | self._data1 = list(data) | |
69 | if names: | |
70 | self._data2 = dict(zip(names, data)) | |
71 | else: | |
72 | self._data2 = dict() | |
73 | def append(self, value, name = None): | |
74 | self._data1.append(value) | |
75 | if self._data2: | |
76 | assert name not in self._data2 | |
77 | self._data2[name] = value | |
78 | def __getitem__(self, item): | |
79 | if isinstance(item, int): | |
80 | return self._data1[item] | |
81 | else: | |
82 | return self._data2[item] | |
83 | def __len__(self): | |
84 | return len(self._data1) | |
85 | # def __repr__(self): | |
86 | # return | |
87 | ||
88 | class Data: | |
89 | def __init__(self, rows = [], colnames = []): | |
90 | assert not (colnames and rows) or len(colnames) == len(rows[0]) | |
91 | self._colnames = colnames | |
92 | self._data = [] | |
93 | for r in rows: | |
94 | self.add_row(r) | |
95 | def add_row(self, row): | |
96 | if isinstance(row, Row): | |
97 | self._data.append(row) | |
98 | else: | |
99 | self._data.append(Row(row, self._colnames)) | |
100 | def nrows(self): | |
101 | return len(self._data) | |
102 | def ncols(self): | |
103 | return len(self._data[0]) | |
104 | def read_csv(self, stream, has_header = False): | |
105 | self._data = [] | |
106 | self._colnames = [] | |
107 | self._datadict = [] | |
108 | n = 0 | |
109 | reader = csv.reader(stream) | |
110 | for line in reader: | |
111 | if n and len(line) != n: | |
112 | raise 'Not matching number of columns in different rows' | |
113 | if not n: | |
114 | n = len(line) | |
115 | if has_header: | |
116 | self._colnames = line | |
117 | continue | |
118 | row = [] | |
119 | for i in line: | |
120 | try: | |
121 | row.append(float(i)) | |
122 | except: | |
123 | row.append(i) | |
124 | self._data.append(row) | |
125 | if has_header: | |
126 | self._gen_data_dict() | |
127 | def write_csv(self, stream): | |
128 | writer = csv.writer(stream) | |
129 | writer.writerows(self._data) | |
130 | def column(self, col): | |
131 | if isinstance(col, int): | |
132 | return [row[col] for row in self._data] | |
133 | else: | |
134 | return [row[col] for row in self._datadict] | |
135 | def row(self, row): | |
136 | return self._data[row] | |
137 | def cell(self, row, col): | |
138 | if isinstance(col, int): | |
139 | return self._data[row][col] | |
140 | else: | |
141 | return self._datadict[row][col] | |
142 | def select(self, cols = None, selectfn = lambda x: True, | |
143 | groupfn = lambda x: None): | |
144 | if cols: | |
145 | cols = list(cols) | |
146 | else: | |
147 | cols = range(self.ncols()) | |
148 | groups = {} | |
149 | res = [] | |
150 | for row in self._data if isinstance(cols[0], int) else self._datadict: | |
151 | if not selectfn(row): | |
152 | continue | |
153 | ||
154 | def add_column(self, fn, colname = None): | |
155 | if self._colnames: | |
156 | assert colname | |
157 | for row in self._data: | |
158 | row.append(fn(row)) | |
159 | if colname: | |
160 | self._colname.append(colname) | |
161 | for row in self._datadict: | |
162 | row[colname] = fn(row) | |
163 | return self.ncols() - 1 | |
164 | ||
165 | def uniq(l): | |
166 | data = [] | |
167 | for i in l: | |
168 | if i not in data: | |
169 | data.append(i) | |
170 | return data |
0 | #!/usr/bin/env python | |
1 | # vim: ts=4:sw=4:et:ai:sts=4 | |
2 | ||
3 | import csv, getopt, nemu, os, os.path, re, select, subprocess, sys | |
4 | ||
5 | __doc__ = """Creates a linear network topology, and measures the maximum | |
6 | end-to-end throughput for the specified packet size.""" | |
7 | ||
8 | def usage(f): | |
9 | f.write("Usage: %s --nodes=NUM [TOPOLOGY_OPTIONS] [TEST_OPTIONS]\n%s\n\n" % | |
10 | (os.path.basename(sys.argv[0]), __doc__)) | |
11 | ||
12 | f.write("Topology configuration:\n") | |
13 | f.write(" -n, --nodes=NUM Number of nodes to create (mandatory)\n") | |
14 | f.write(" --use-p2p Use P2P links, to avoid bridging\n") | |
15 | f.write(" --delay=SECS Add delay emulation in links\n") | |
16 | f.write(" --jitter=PERCENT Add jitter emulation in links\n") | |
17 | f.write(" --bandwidth=BPS Maximum bandwidth of links\n\n") | |
18 | ||
19 | f.write("Test specification:\n") | |
20 | f.write(" Parameters take single values or ranges of falues in the form " + | |
21 | "nnn-NNN, a test\n") | |
22 | f.write(" will be run for each possible combination.\n") | |
23 | f.write(" -s, --pktsize=BYTES Size of packet payload (mandatory)\n") | |
24 | f.write(" --bwlimit=BPS Apply bandwidth limitation in the " + | |
25 | "traffic generator\n\n") | |
26 | # background noise | |
27 | f.write("How long should each test run (defaults to -t 10):\n") | |
28 | f.write(" -t, --time=SECS Stop after SECS seconds\n") | |
29 | f.write(" -p, --packets=NUM Stop after NUM packets\n") | |
30 | f.write(" -b, --bytes=BYTES Stop after BYTES bytes sent\n\n") | |
31 | ||
32 | f.write("Output format:\n") | |
33 | f.write(" --format=FMT Valid values are `csv', `brief', " + | |
34 | "and `verbose'\n") | |
35 | ||
36 | def main(): | |
37 | error = None | |
38 | opts = [] | |
39 | try: | |
40 | opts, args = getopt.getopt(sys.argv[1:], "hn:s:t:p:b:", [ | |
41 | "help", "nodes=", "pktsize=", "time=", "packets=", "bytes=", | |
42 | "use-p2p", "delay=", "jitter=", "bandwidth=", "format=" ]) | |
43 | except getopt.GetoptError, err: | |
44 | error = str(err) # opts will be empty | |
45 | ||
46 | pktsize = nr = time = packets = nbytes = None | |
47 | delay = jitter = bandwidth = None | |
48 | use_p2p = False | |
49 | format = "verbose" | |
50 | ||
51 | for o, a in opts: | |
52 | if o in ("-h", "--help"): | |
53 | usage(sys.stdout) | |
54 | sys.exit(0) | |
55 | elif o in ("-n", "--nodes"): | |
56 | nr = int(a) | |
57 | if nr > 65: | |
58 | error = "Invalid value for %s: %s" % (o, a) | |
59 | break | |
60 | elif o in ("-s", "--pktsize"): | |
61 | pktsize = int(a) | |
62 | elif o in ("-t", "--time"): | |
63 | time = float(a) | |
64 | elif o in ("-p", "--packets"): | |
65 | packets = int(a) | |
66 | elif o in ("--bytes"): | |
67 | nbytes = int(a) | |
68 | elif o in ("--delay"): | |
69 | delay = float(a) | |
70 | elif o in ("--jitter"): | |
71 | jitter = float(a) | |
72 | elif o in ("--bandwidth"): | |
73 | bandwidth = float(a) | |
74 | elif o in ("--use-p2p"): | |
75 | use_p2p = True | |
76 | continue # avoid the value check | |
77 | elif o == "--format": | |
78 | if a not in ('csv', 'brief', 'verbose'): | |
79 | error = "Invalid value for %s: %s" % (o, a) | |
80 | break | |
81 | format = a | |
82 | continue | |
83 | else: | |
84 | raise RuntimeError("Cannot happen") | |
85 | # In all cases, I take a number | |
86 | if float(a) <= 0: | |
87 | error = "Invalid value for %s: %s" % (o, a) | |
88 | ||
89 | if not error: | |
90 | if args: | |
91 | error = "Unknown argument(s): %s" % " ".join(args) | |
92 | elif not nr: | |
93 | error = "Missing mandatory --nodes argument" | |
94 | elif not pktsize: | |
95 | error = "Missing mandatory --pktsize argument" | |
96 | elif use_p2p and (delay or jitter or bandwidth): | |
97 | error = "Cannot use links emulation with P2P links" | |
98 | ||
99 | if error: | |
100 | sys.stderr.write("%s: %s\n" % (os.path.basename(sys.argv[0]), error)) | |
101 | sys.stderr.write("Try `%s --help' for more information.\n" % | |
102 | os.path.basename(sys.argv[0])) | |
103 | #usage(sys.stderr) | |
104 | sys.exit(2) | |
105 | ||
106 | if not (time or nbytes or packets): | |
107 | time = 10 | |
108 | ||
109 | udp_perf = nemu.environ.find_bin("udp-perf", | |
110 | extra_path = [".", os.path.dirname(sys.argv[0])]) | |
111 | if not udp_perf: | |
112 | raise RuntimeError("Cannot find `udp-perf'") | |
113 | ||
114 | nodes, interfaces, links = create_topo(nr, use_p2p, delay, jitter, | |
115 | bandwidth) | |
116 | ||
117 | cmdline = [udp_perf, "--server"] | |
118 | if time: | |
119 | cmdline.append("--max-time=%d" % time) | |
120 | if packets: | |
121 | cmdline.append("--max-pkts=%d" % packets) | |
122 | if nbytes: | |
123 | cmdline.append("--max-bytes=%d" % nbytes) | |
124 | if format == "verbose": | |
125 | cmdline.append("--verbose") | |
126 | ||
127 | srv = nodes[0].Popen(cmdline, stdout = subprocess.PIPE) | |
128 | ||
129 | cmdline = [udp_perf, "--client", "--pktsize=%d" % pktsize] | |
130 | if nr > 1: | |
131 | cmdline.append("--host=10.0.0.1") | |
132 | clt = nodes[nr - 1].Popen(cmdline) | |
133 | ||
134 | out = "" | |
135 | while(True): | |
136 | ready = select.select([srv.stdout], [], [], 0.1)[0] | |
137 | if ready: | |
138 | r = os.read(srv.stdout.fileno(), 1024) | |
139 | if not r: | |
140 | break | |
141 | out += r | |
142 | if srv.poll() != None or clt.poll() != None: | |
143 | break | |
144 | ||
145 | if srv.poll(): | |
146 | raise RuntimeError("upd-perf server returned with error.") | |
147 | ||
148 | if clt.poll(): | |
149 | raise RuntimeError("upd-perf client returned with error.") | |
150 | ||
151 | srv.wait() | |
152 | clt.wait() | |
153 | ||
154 | out = out.strip() | |
155 | ||
156 | if format != "csv": | |
157 | print "Command line: %s" % (" ".join(sys.argv[1:])) | |
158 | print out.strip() | |
159 | return | |
160 | ||
161 | data = out.split(" ") | |
162 | data = dict(map(lambda s: s.partition(":")[::2], data)) | |
163 | if sorted(data.keys()) != sorted(["brx", "prx", "pksz", "plsz", "err", | |
164 | "mind", "avgd", "maxd", "jit", "time"]): | |
165 | raise RuntimeError("Invalid output from udp-perf") | |
166 | data["nodes"] = nr | |
167 | data["bridge"] = int(not use_p2p) | |
168 | data["cfg_dly"] = delay if delay else "" | |
169 | data["cfg_bw"] = bandwidth if bandwidth else "" | |
170 | data["cfg_jit"] = jitter if jitter else "" | |
171 | ||
172 | res = [] | |
173 | for i in ["nodes", "bridge", "cfg_dly", "cfg_bw", "cfg_jit", | |
174 | "brx", "prx", "pksz", "plsz", "err", "mind", "avgd", | |
175 | "maxd", "jit", "time"]: | |
176 | res.append(data[i]) | |
177 | ||
178 | writer = csv.writer(sys.stdout) | |
179 | writer.writerow(res) | |
180 | ||
181 | def ip2dec(ip): | |
182 | match = re.search(r'^(\d+)\.(\d+)\.(\d+)\.(\d+)$', ip) | |
183 | assert match | |
184 | return long(match.group(1)) * 2**24 + long(match.group(2)) * 2**16 + \ | |
185 | long(match.group(3)) * 2**8 + long(match.group(4)) | |
186 | ||
187 | def dec2ip(dec): | |
188 | res = [None] * 4 | |
189 | for i in range(4): | |
190 | res[3 - i] = dec % 256 | |
191 | dec >>= 8 | |
192 | return "%d.%d.%d.%d" % tuple(res) | |
193 | ||
194 | def create_topo(n, p2p, delay, jitter, bw): | |
195 | nodes = [] | |
196 | interfaces = [] | |
197 | links = [] | |
198 | for i in range(n): | |
199 | nodes.append(nemu.Node()) | |
200 | if p2p: | |
201 | interfaces = [[None]] | |
202 | for i in range(n - 1): | |
203 | a, b = nemu.P2PInterface.create_pair(nodes[i], nodes[i + 1]) | |
204 | interfaces[i].append(a) | |
205 | interfaces.append([]) | |
206 | interfaces[i + 1] = [b] | |
207 | interfaces[n - 1].append(None) | |
208 | else: | |
209 | for i in range(n): | |
210 | if i > 0: | |
211 | left = nodes[i].add_if() | |
212 | else: | |
213 | left = None | |
214 | if i < n - 1: | |
215 | right = nodes[i].add_if() | |
216 | else: | |
217 | right = None | |
218 | interfaces.append((left, right)) | |
219 | for i in range(n - 1): | |
220 | links = nemu.Switch(bandwidth = bw, delay = delay, | |
221 | delay_jitter = jitter) | |
222 | links.up = True | |
223 | links.connect(interfaces[i][1]) | |
224 | links.connect(interfaces[i + 1][0]) | |
225 | links.append(links) | |
226 | ||
227 | for i in range(n): | |
228 | for j in (0, 1): | |
229 | if interfaces[i][j]: | |
230 | interfaces[i][j].up = True | |
231 | ||
232 | ip = ip2dec("10.0.0.1") | |
233 | for i in range(n - 1): | |
234 | interfaces[i][1].add_v4_address(dec2ip(ip), 30) | |
235 | interfaces[i + 1][0].add_v4_address(dec2ip(ip + 1), 30) | |
236 | ip += 4 | |
237 | ||
238 | ipbase = ip2dec("10.0.0.0") | |
239 | lastnet = dec2ip(ipbase + 4 * (n - 2)) | |
240 | for i in range(n - 2): | |
241 | nodes[i].add_route(prefix = lastnet, prefix_len = 30, | |
242 | nexthop = dec2ip(ipbase + 4 * i + 2)) | |
243 | nodes[n - 1 - i].add_route(prefix = "10.0.0.0", prefix_len = 30, | |
244 | nexthop = dec2ip(ipbase + (n - 2 - i) * 4 + 1)) | |
245 | return nodes, interfaces, links | |
246 | ||
247 | if __name__ == "__main__": | |
248 | main() |
0 | set terminal postscript colour enhanced landscape lw 1 10 | |
1 | set key box left top width 1 title 'Experiment' | |
2 | set xlabel 'Number of nodes' | |
3 | set ylabel 'Processing cost per packet (10E-6 sec)' | |
4 | set title 'Processing cost for 1000-byte packets' | |
5 | set xrange [0:35] | |
6 | plot \ | |
7 | 'results-simu.txt' index 0 every 8::1 using 2:3 title "Exp 1" with linespoints, \ | |
8 | 'results-simu.txt' index 1 every 8::1 using 2:3 title "Exp 2" with linespoints, \ | |
9 | 'results-simu.txt' index 2 every 8::1 using 2:3 title "Exp 3" with linespoints, \ | |
10 | 'results.txt' index 0 every 13::11 using 1:($10/$3) title "Exp 4" with linespoints, \ | |
11 | 'results.txt' index 1 every 13::11 using 1:($10/$3) title "Exp 4bis" with linespoints | |
12 |
0 | %!PS-Adobe-2.0 | |
1 | %%Creator: gnuplot 4.2 patchlevel 3 | |
2 | %%CreationDate: Mon Aug 16 13:02:27 2010 | |
3 | %%DocumentFonts: (atend) | |
4 | %%BoundingBox: 50 50 554 770 | |
5 | %%Orientation: Landscape | |
6 | %%Pages: (atend) | |
7 | %%EndComments | |
8 | %%BeginProlog | |
9 | /gnudict 256 dict def | |
10 | gnudict begin | |
11 | % | |
12 | % The following 6 true/false flags may be edited by hand if required | |
13 | % The unit line width may also be changed | |
14 | % | |
15 | /Color true def | |
16 | /Blacktext false def | |
17 | /Solid false def | |
18 | /Dashlength 1 def | |
19 | /Landscape true def | |
20 | /Level1 false def | |
21 | /Rounded false def | |
22 | /TransparentPatterns false def | |
23 | /gnulinewidth 5.000 def | |
24 | /userlinewidth gnulinewidth def | |
25 | % | |
26 | /vshift -33 def | |
27 | /dl1 { | |
28 | 10.0 Dashlength mul mul | |
29 | Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if | |
30 | } def | |
31 | /dl2 { | |
32 | 10.0 Dashlength mul mul | |
33 | Rounded { currentlinewidth 0.75 mul add } if | |
34 | } def | |
35 | /hpt_ 31.5 def | |
36 | /vpt_ 31.5 def | |
37 | /hpt hpt_ def | |
38 | /vpt vpt_ def | |
39 | Level1 {} { | |
40 | /SDict 10 dict def | |
41 | systemdict /pdfmark known not { | |
42 | userdict /pdfmark systemdict /cleartomark get put | |
43 | } if | |
44 | SDict begin [ | |
45 | /Title () | |
46 | /Subject (gnuplot plot) | |
47 | /Creator (gnuplot 4.2 patchlevel 3 ) | |
48 | /Author (Martin_Hernan Ferrari,L133,2417) | |
49 | % /Producer (gnuplot) | |
50 | % /Keywords () | |
51 | /CreationDate (Mon Aug 16 13:02:27 2010) | |
52 | /DOCINFO pdfmark | |
53 | end | |
54 | } ifelse | |
55 | % | |
56 | % Gnuplot Prolog Version 4.2 (August 2006) | |
57 | % | |
58 | /M {moveto} bind def | |
59 | /L {lineto} bind def | |
60 | /R {rmoveto} bind def | |
61 | /V {rlineto} bind def | |
62 | /N {newpath moveto} bind def | |
63 | /Z {closepath} bind def | |
64 | /C {setrgbcolor} bind def | |
65 | /f {rlineto fill} bind def | |
66 | /vpt2 vpt 2 mul def | |
67 | /hpt2 hpt 2 mul def | |
68 | /Lshow {currentpoint stroke M 0 vshift R | |
69 | Blacktext {gsave 0 setgray show grestore} {show} ifelse} def | |
70 | /Rshow {currentpoint stroke M dup stringwidth pop neg vshift R | |
71 | Blacktext {gsave 0 setgray show grestore} {show} ifelse} def | |
72 | /Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R | |
73 | Blacktext {gsave 0 setgray show grestore} {show} ifelse} def | |
74 | /UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def | |
75 | /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def | |
76 | /DL {Color {setrgbcolor Solid {pop []} if 0 setdash} | |
77 | {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def | |
78 | /BL {stroke userlinewidth 2 mul setlinewidth | |
79 | Rounded {1 setlinejoin 1 setlinecap} if} def | |
80 | /AL {stroke userlinewidth 2 div setlinewidth | |
81 | Rounded {1 setlinejoin 1 setlinecap} if} def | |
82 | /UL {dup gnulinewidth mul /userlinewidth exch def | |
83 | dup 1 lt {pop 1} if 10 mul /udl exch def} def | |
84 | /PL {stroke userlinewidth setlinewidth | |
85 | Rounded {1 setlinejoin 1 setlinecap} if} def | |
86 | % Default Line colors | |
87 | /LCw {1 1 1} def | |
88 | /LCb {0 0 0} def | |
89 | /LCa {0 0 0} def | |
90 | /LC0 {1 0 0} def | |
91 | /LC1 {0 1 0} def | |
92 | /LC2 {0 0 1} def | |
93 | /LC3 {1 0 1} def | |
94 | /LC4 {0 1 1} def | |
95 | /LC5 {1 1 0} def | |
96 | /LC6 {0 0 0} def | |
97 | /LC7 {1 0.3 0} def | |
98 | /LC8 {0.5 0.5 0.5} def | |
99 | % Default Line Types | |
100 | /LTw {PL [] 1 setgray} def | |
101 | /LTb {BL [] LCb DL} def | |
102 | /LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def | |
103 | /LT0 {PL [] LC0 DL} def | |
104 | /LT1 {PL [4 dl1 2 dl2] LC1 DL} def | |
105 | /LT2 {PL [2 dl1 3 dl2] LC2 DL} def | |
106 | /LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def | |
107 | /LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def | |
108 | /LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def | |
109 | /LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def | |
110 | /LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def | |
111 | /LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def | |
112 | /Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def | |
113 | /Dia {stroke [] 0 setdash 2 copy vpt add M | |
114 | hpt neg vpt neg V hpt vpt neg V | |
115 | hpt vpt V hpt neg vpt V closepath stroke | |
116 | Pnt} def | |
117 | /Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V | |
118 | currentpoint stroke M | |
119 | hpt neg vpt neg R hpt2 0 V stroke | |
120 | } def | |
121 | /Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M | |
122 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V | |
123 | hpt2 neg 0 V closepath stroke | |
124 | Pnt} def | |
125 | /Crs {stroke [] 0 setdash exch hpt sub exch vpt add M | |
126 | hpt2 vpt2 neg V currentpoint stroke M | |
127 | hpt2 neg 0 R hpt2 vpt2 V stroke} def | |
128 | /TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M | |
129 | hpt neg vpt -1.62 mul V | |
130 | hpt 2 mul 0 V | |
131 | hpt neg vpt 1.62 mul V closepath stroke | |
132 | Pnt} def | |
133 | /Star {2 copy Pls Crs} def | |
134 | /BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M | |
135 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V | |
136 | hpt2 neg 0 V closepath fill} def | |
137 | /TriUF {stroke [] 0 setdash vpt 1.12 mul add M | |
138 | hpt neg vpt -1.62 mul V | |
139 | hpt 2 mul 0 V | |
140 | hpt neg vpt 1.62 mul V closepath fill} def | |
141 | /TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M | |
142 | hpt neg vpt 1.62 mul V | |
143 | hpt 2 mul 0 V | |
144 | hpt neg vpt -1.62 mul V closepath stroke | |
145 | Pnt} def | |
146 | /TriDF {stroke [] 0 setdash vpt 1.12 mul sub M | |
147 | hpt neg vpt 1.62 mul V | |
148 | hpt 2 mul 0 V | |
149 | hpt neg vpt -1.62 mul V closepath fill} def | |
150 | /DiaF {stroke [] 0 setdash vpt add M | |
151 | hpt neg vpt neg V hpt vpt neg V | |
152 | hpt vpt V hpt neg vpt V closepath fill} def | |
153 | /Pent {stroke [] 0 setdash 2 copy gsave | |
154 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat | |
155 | closepath stroke grestore Pnt} def | |
156 | /PentF {stroke [] 0 setdash gsave | |
157 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat | |
158 | closepath fill grestore} def | |
159 | /Circle {stroke [] 0 setdash 2 copy | |
160 | hpt 0 360 arc stroke Pnt} def | |
161 | /CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def | |
162 | /C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def | |
163 | /C1 {BL [] 0 setdash 2 copy moveto | |
164 | 2 copy vpt 0 90 arc closepath fill | |
165 | vpt 0 360 arc closepath} bind def | |
166 | /C2 {BL [] 0 setdash 2 copy moveto | |
167 | 2 copy vpt 90 180 arc closepath fill | |
168 | vpt 0 360 arc closepath} bind def | |
169 | /C3 {BL [] 0 setdash 2 copy moveto | |
170 | 2 copy vpt 0 180 arc closepath fill | |
171 | vpt 0 360 arc closepath} bind def | |
172 | /C4 {BL [] 0 setdash 2 copy moveto | |
173 | 2 copy vpt 180 270 arc closepath fill | |
174 | vpt 0 360 arc closepath} bind def | |
175 | /C5 {BL [] 0 setdash 2 copy moveto | |
176 | 2 copy vpt 0 90 arc | |
177 | 2 copy moveto | |
178 | 2 copy vpt 180 270 arc closepath fill | |
179 | vpt 0 360 arc} bind def | |
180 | /C6 {BL [] 0 setdash 2 copy moveto | |
181 | 2 copy vpt 90 270 arc closepath fill | |
182 | vpt 0 360 arc closepath} bind def | |
183 | /C7 {BL [] 0 setdash 2 copy moveto | |
184 | 2 copy vpt 0 270 arc closepath fill | |
185 | vpt 0 360 arc closepath} bind def | |
186 | /C8 {BL [] 0 setdash 2 copy moveto | |
187 | 2 copy vpt 270 360 arc closepath fill | |
188 | vpt 0 360 arc closepath} bind def | |
189 | /C9 {BL [] 0 setdash 2 copy moveto | |
190 | 2 copy vpt 270 450 arc closepath fill | |
191 | vpt 0 360 arc closepath} bind def | |
192 | /C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill | |
193 | 2 copy moveto | |
194 | 2 copy vpt 90 180 arc closepath fill | |
195 | vpt 0 360 arc closepath} bind def | |
196 | /C11 {BL [] 0 setdash 2 copy moveto | |
197 | 2 copy vpt 0 180 arc closepath fill | |
198 | 2 copy moveto | |
199 | 2 copy vpt 270 360 arc closepath fill | |
200 | vpt 0 360 arc closepath} bind def | |
201 | /C12 {BL [] 0 setdash 2 copy moveto | |
202 | 2 copy vpt 180 360 arc closepath fill | |
203 | vpt 0 360 arc closepath} bind def | |
204 | /C13 {BL [] 0 setdash 2 copy moveto | |
205 | 2 copy vpt 0 90 arc closepath fill | |
206 | 2 copy moveto | |
207 | 2 copy vpt 180 360 arc closepath fill | |
208 | vpt 0 360 arc closepath} bind def | |
209 | /C14 {BL [] 0 setdash 2 copy moveto | |
210 | 2 copy vpt 90 360 arc closepath fill | |
211 | vpt 0 360 arc} bind def | |
212 | /C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill | |
213 | vpt 0 360 arc closepath} bind def | |
214 | /Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto | |
215 | neg 0 rlineto closepath} bind def | |
216 | /Square {dup Rec} bind def | |
217 | /Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def | |
218 | /S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def | |
219 | /S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def | |
220 | /S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def | |
221 | /S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def | |
222 | /S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def | |
223 | /S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill | |
224 | exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def | |
225 | /S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def | |
226 | /S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill | |
227 | 2 copy vpt Square fill Bsquare} bind def | |
228 | /S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def | |
229 | /S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def | |
230 | /S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill | |
231 | Bsquare} bind def | |
232 | /S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill | |
233 | Bsquare} bind def | |
234 | /S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def | |
235 | /S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill | |
236 | 2 copy vpt Square fill Bsquare} bind def | |
237 | /S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill | |
238 | 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def | |
239 | /S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def | |
240 | /D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def | |
241 | /D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def | |
242 | /D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def | |
243 | /D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def | |
244 | /D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def | |
245 | /D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def | |
246 | /D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def | |
247 | /D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def | |
248 | /D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def | |
249 | /D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def | |
250 | /D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def | |
251 | /D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def | |
252 | /D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def | |
253 | /D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def | |
254 | /D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def | |
255 | /D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def | |
256 | /DiaE {stroke [] 0 setdash vpt add M | |
257 | hpt neg vpt neg V hpt vpt neg V | |
258 | hpt vpt V hpt neg vpt V closepath stroke} def | |
259 | /BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M | |
260 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V | |
261 | hpt2 neg 0 V closepath stroke} def | |
262 | /TriUE {stroke [] 0 setdash vpt 1.12 mul add M | |
263 | hpt neg vpt -1.62 mul V | |
264 | hpt 2 mul 0 V | |
265 | hpt neg vpt 1.62 mul V closepath stroke} def | |
266 | /TriDE {stroke [] 0 setdash vpt 1.12 mul sub M | |
267 | hpt neg vpt 1.62 mul V | |
268 | hpt 2 mul 0 V | |
269 | hpt neg vpt -1.62 mul V closepath stroke} def | |
270 | /PentE {stroke [] 0 setdash gsave | |
271 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat | |
272 | closepath stroke grestore} def | |
273 | /CircE {stroke [] 0 setdash | |
274 | hpt 0 360 arc stroke} def | |
275 | /Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def | |
276 | /DiaW {stroke [] 0 setdash vpt add M | |
277 | hpt neg vpt neg V hpt vpt neg V | |
278 | hpt vpt V hpt neg vpt V Opaque stroke} def | |
279 | /BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M | |
280 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V | |
281 | hpt2 neg 0 V Opaque stroke} def | |
282 | /TriUW {stroke [] 0 setdash vpt 1.12 mul add M | |
283 | hpt neg vpt -1.62 mul V | |
284 | hpt 2 mul 0 V | |
285 | hpt neg vpt 1.62 mul V Opaque stroke} def | |
286 | /TriDW {stroke [] 0 setdash vpt 1.12 mul sub M | |
287 | hpt neg vpt 1.62 mul V | |
288 | hpt 2 mul 0 V | |
289 | hpt neg vpt -1.62 mul V Opaque stroke} def | |
290 | /PentW {stroke [] 0 setdash gsave | |
291 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat | |
292 | Opaque stroke grestore} def | |
293 | /CircW {stroke [] 0 setdash | |
294 | hpt 0 360 arc Opaque stroke} def | |
295 | /BoxFill {gsave Rec 1 setgray fill grestore} def | |
296 | /Density { | |
297 | /Fillden exch def | |
298 | currentrgbcolor | |
299 | /ColB exch def /ColG exch def /ColR exch def | |
300 | /ColR ColR Fillden mul Fillden sub 1 add def | |
301 | /ColG ColG Fillden mul Fillden sub 1 add def | |
302 | /ColB ColB Fillden mul Fillden sub 1 add def | |
303 | ColR ColG ColB setrgbcolor} def | |
304 | /BoxColFill {gsave Rec PolyFill} def | |
305 | /PolyFill {gsave Density fill grestore grestore} def | |
306 | /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def | |
307 | % | |
308 | % PostScript Level 1 Pattern Fill routine for rectangles | |
309 | % Usage: x y w h s a XX PatternFill | |
310 | % x,y = lower left corner of box to be filled | |
311 | % w,h = width and height of box | |
312 | % a = angle in degrees between lines and x-axis | |
313 | % XX = 0/1 for no/yes cross-hatch | |
314 | % | |
315 | /PatternFill {gsave /PFa [ 9 2 roll ] def | |
316 | PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate | |
317 | PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec | |
318 | gsave 1 setgray fill grestore clip | |
319 | currentlinewidth 0.5 mul setlinewidth | |
320 | /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def | |
321 | 0 0 M PFa 5 get rotate PFs -2 div dup translate | |
322 | 0 1 PFs PFa 4 get div 1 add floor cvi | |
323 | {PFa 4 get mul 0 M 0 PFs V} for | |
324 | 0 PFa 6 get ne { | |
325 | 0 1 PFs PFa 4 get div 1 add floor cvi | |
326 | {PFa 4 get mul 0 2 1 roll M PFs 0 V} for | |
327 | } if | |
328 | stroke grestore} def | |
329 | % | |
330 | /languagelevel where | |
331 | {pop languagelevel} {1} ifelse | |
332 | 2 lt | |
333 | {/InterpretLevel1 true def} | |
334 | {/InterpretLevel1 Level1 def} | |
335 | ifelse | |
336 | % | |
337 | % PostScript level 2 pattern fill definitions | |
338 | % | |
339 | /Level2PatternFill { | |
340 | /Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} | |
341 | bind def | |
342 | /KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def | |
343 | << Tile8x8 | |
344 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} | |
345 | >> matrix makepattern | |
346 | /Pat1 exch def | |
347 | << Tile8x8 | |
348 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke | |
349 | 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} | |
350 | >> matrix makepattern | |
351 | /Pat2 exch def | |
352 | << Tile8x8 | |
353 | /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L | |
354 | 8 8 L 8 0 L 0 0 L fill} | |
355 | >> matrix makepattern | |
356 | /Pat3 exch def | |
357 | << Tile8x8 | |
358 | /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L | |
359 | 0 12 M 12 0 L stroke} | |
360 | >> matrix makepattern | |
361 | /Pat4 exch def | |
362 | << Tile8x8 | |
363 | /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L | |
364 | 0 -4 M 12 8 L stroke} | |
365 | >> matrix makepattern | |
366 | /Pat5 exch def | |
367 | << Tile8x8 | |
368 | /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L | |
369 | 0 12 M 8 -4 L 4 12 M 10 0 L stroke} | |
370 | >> matrix makepattern | |
371 | /Pat6 exch def | |
372 | << Tile8x8 | |
373 | /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L | |
374 | 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} | |
375 | >> matrix makepattern | |
376 | /Pat7 exch def | |
377 | << Tile8x8 | |
378 | /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L | |
379 | 12 0 M -4 8 L 12 4 M 0 10 L stroke} | |
380 | >> matrix makepattern | |
381 | /Pat8 exch def | |
382 | << Tile8x8 | |
383 | /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L | |
384 | -4 0 M 12 8 L -4 4 M 8 10 L stroke} | |
385 | >> matrix makepattern | |
386 | /Pat9 exch def | |
387 | /Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def | |
388 | /Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def | |
389 | /Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def | |
390 | /Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def | |
391 | /Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def | |
392 | /Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def | |
393 | /Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def | |
394 | } def | |
395 | % | |
396 | % | |
397 | %End of PostScript Level 2 code | |
398 | % | |
399 | /PatternBgnd { | |
400 | TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse | |
401 | } def | |
402 | % | |
403 | % Substitute for Level 2 pattern fill codes with | |
404 | % grayscale if Level 2 support is not selected. | |
405 | % | |
406 | /Level1PatternFill { | |
407 | /Pattern1 {0.250 Density} bind def | |
408 | /Pattern2 {0.500 Density} bind def | |
409 | /Pattern3 {0.750 Density} bind def | |
410 | /Pattern4 {0.125 Density} bind def | |
411 | /Pattern5 {0.375 Density} bind def | |
412 | /Pattern6 {0.625 Density} bind def | |
413 | /Pattern7 {0.875 Density} bind def | |
414 | } def | |
415 | % | |
416 | % Now test for support of Level 2 code | |
417 | % | |
418 | Level1 {Level1PatternFill} {Level2PatternFill} ifelse | |
419 | % | |
420 | /Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont | |
421 | dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall | |
422 | currentdict end definefont pop | |
423 | /MFshow { | |
424 | { dup 5 get 3 ge | |
425 | { 5 get 3 eq {gsave} {grestore} ifelse } | |
426 | {dup dup 0 get findfont exch 1 get scalefont setfont | |
427 | [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 | |
428 | get exch 4 get {show} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq | |
429 | {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 | |
430 | get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div | |
431 | dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get | |
432 | show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop | |
433 | pop aload pop M} ifelse }ifelse }ifelse } | |
434 | ifelse } | |
435 | forall} bind def | |
436 | /MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } | |
437 | {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont | |
438 | 6 get stringwidth pop add} {pop} ifelse} ifelse} forall} bind def | |
439 | /MLshow { currentpoint stroke M | |
440 | 0 exch R | |
441 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def | |
442 | /MRshow { currentpoint stroke M | |
443 | exch dup MFwidth neg 3 -1 roll R | |
444 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def | |
445 | /MCshow { currentpoint stroke M | |
446 | exch dup MFwidth -2 div 3 -1 roll R | |
447 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def | |
448 | /XYsave { [( ) 1 2 true false 3 ()] } bind def | |
449 | /XYrestore { [( ) 1 2 true false 4 ()] } bind def | |
450 | end | |
451 | %%EndProlog | |
452 | %%Page: 1 1 | |
453 | gnudict begin | |
454 | gsave | |
455 | 50 50 translate | |
456 | 0.100 0.100 scale | |
457 | 90 rotate | |
458 | 0 -5040 translate | |
459 | 0 setgray | |
460 | newpath | |
461 | (Helvetica) findfont 100 scalefont setfont | |
462 | 1.000 UL | |
463 | LTb | |
464 | 510 300 M | |
465 | 63 0 V | |
466 | 6457 0 R | |
467 | -63 0 V | |
468 | stroke | |
469 | 450 300 M | |
470 | [ [(Helvetica) 100.0 0.0 true true 0 ( 0)] | |
471 | ] -33.3 MRshow | |
472 | 1.000 UL | |
473 | LTb | |
474 | 510 934 M | |
475 | 63 0 V | |
476 | 6457 0 R | |
477 | -63 0 V | |
478 | stroke | |
479 | 450 934 M | |
480 | [ [(Helvetica) 100.0 0.0 true true 0 ( 50)] | |
481 | ] -33.3 MRshow | |
482 | 1.000 UL | |
483 | LTb | |
484 | 510 1569 M | |
485 | 63 0 V | |
486 | 6457 0 R | |
487 | -63 0 V | |
488 | stroke | |
489 | 450 1569 M | |
490 | [ [(Helvetica) 100.0 0.0 true true 0 ( 100)] | |
491 | ] -33.3 MRshow | |
492 | 1.000 UL | |
493 | LTb | |
494 | 510 2203 M | |
495 | 63 0 V | |
496 | 6457 0 R | |
497 | -63 0 V | |
498 | stroke | |
499 | 450 2203 M | |
500 | [ [(Helvetica) 100.0 0.0 true true 0 ( 150)] | |
501 | ] -33.3 MRshow | |
502 | 1.000 UL | |
503 | LTb | |
504 | 510 2837 M | |
505 | 63 0 V | |
506 | 6457 0 R | |
507 | -63 0 V | |
508 | stroke | |
509 | 450 2837 M | |
510 | [ [(Helvetica) 100.0 0.0 true true 0 ( 200)] | |
511 | ] -33.3 MRshow | |
512 | 1.000 UL | |
513 | LTb | |
514 | 510 3471 M | |
515 | 63 0 V | |
516 | 6457 0 R | |
517 | -63 0 V | |
518 | stroke | |
519 | 450 3471 M | |
520 | [ [(Helvetica) 100.0 0.0 true true 0 ( 250)] | |
521 | ] -33.3 MRshow | |
522 | 1.000 UL | |
523 | LTb | |
524 | 510 4106 M | |
525 | 63 0 V | |
526 | 6457 0 R | |
527 | -63 0 V | |
528 | stroke | |
529 | 450 4106 M | |
530 | [ [(Helvetica) 100.0 0.0 true true 0 ( 300)] | |
531 | ] -33.3 MRshow | |
532 | 1.000 UL | |
533 | LTb | |
534 | 510 4740 M | |
535 | 63 0 V | |
536 | 6457 0 R | |
537 | -63 0 V | |
538 | stroke | |
539 | 450 4740 M | |
540 | [ [(Helvetica) 100.0 0.0 true true 0 ( 350)] | |
541 | ] -33.3 MRshow | |
542 | 1.000 UL | |
543 | LTb | |
544 | 510 300 M | |
545 | 0 63 V | |
546 | 0 4377 R | |
547 | 0 -63 V | |
548 | stroke | |
549 | 510 200 M | |
550 | [ [(Helvetica) 100.0 0.0 true true 0 ( 0)] | |
551 | ] -33.3 MCshow | |
552 | 1.000 UL | |
553 | LTb | |
554 | 1441 300 M | |
555 | 0 63 V | |
556 | 0 4377 R | |
557 | 0 -63 V | |
558 | stroke | |
559 | 1441 200 M | |
560 | [ [(Helvetica) 100.0 0.0 true true 0 ( 5)] | |
561 | ] -33.3 MCshow | |
562 | 1.000 UL | |
563 | LTb | |
564 | 2373 300 M | |
565 | 0 63 V | |
566 | 0 4377 R | |
567 | 0 -63 V | |
568 | stroke | |
569 | 2373 200 M | |
570 | [ [(Helvetica) 100.0 0.0 true true 0 ( 10)] | |
571 | ] -33.3 MCshow | |
572 | 1.000 UL | |
573 | LTb | |
574 | 3304 300 M | |
575 | 0 63 V | |
576 | 0 4377 R | |
577 | 0 -63 V | |
578 | stroke | |
579 | 3304 200 M | |
580 | [ [(Helvetica) 100.0 0.0 true true 0 ( 15)] | |
581 | ] -33.3 MCshow | |
582 | 1.000 UL | |
583 | LTb | |
584 | 4236 300 M | |
585 | 0 63 V | |
586 | 0 4377 R | |
587 | 0 -63 V | |
588 | stroke | |
589 | 4236 200 M | |
590 | [ [(Helvetica) 100.0 0.0 true true 0 ( 20)] | |
591 | ] -33.3 MCshow | |
592 | 1.000 UL | |
593 | LTb | |
594 | 5167 300 M | |
595 | 0 63 V | |
596 | 0 4377 R | |
597 | 0 -63 V | |
598 | stroke | |
599 | 5167 200 M | |
600 | [ [(Helvetica) 100.0 0.0 true true 0 ( 25)] | |
601 | ] -33.3 MCshow | |
602 | 1.000 UL | |
603 | LTb | |
604 | 6099 300 M | |
605 | 0 63 V | |
606 | 0 4377 R | |
607 | 0 -63 V | |
608 | stroke | |
609 | 6099 200 M | |
610 | [ [(Helvetica) 100.0 0.0 true true 0 ( 30)] | |
611 | ] -33.3 MCshow | |
612 | 1.000 UL | |
613 | LTb | |
614 | 7030 300 M | |
615 | 0 63 V | |
616 | 0 4377 R | |
617 | 0 -63 V | |
618 | stroke | |
619 | 7030 200 M | |
620 | [ [(Helvetica) 100.0 0.0 true true 0 ( 35)] | |
621 | ] -33.3 MCshow | |
622 | 1.000 UL | |
623 | LTb | |
624 | 1.000 UL | |
625 | LTb | |
626 | 510 4740 N | |
627 | 510 300 L | |
628 | 6520 0 V | |
629 | 0 4440 V | |
630 | -6520 0 V | |
631 | Z stroke | |
632 | LCb setrgbcolor | |
633 | 100 2520 M | |
634 | currentpoint gsave translate 90 rotate 0 0 moveto | |
635 | [ [(Helvetica) 100.0 0.0 true true 0 (Processing cost per packet \(10E-6 sec\))] | |
636 | ] -33.3 MCshow | |
637 | grestore | |
638 | LTb | |
639 | LCb setrgbcolor | |
640 | 3770 50 M | |
641 | [ [(Helvetica) 100.0 0.0 true true 0 (Number of nodes)] | |
642 | ] -33.3 MCshow | |
643 | LTb | |
644 | 3770 4890 M | |
645 | [ [(Helvetica) 100.0 0.0 true true 0 (Processing cost for 1000-byte packets)] | |
646 | ] -33.3 MCshow | |
647 | 1.000 UP | |
648 | 1.000 UL | |
649 | LTb | |
650 | 1051 4627 M | |
651 | [ [(Helvetica) 100.0 0.0 true true 0 (Experiment)] | |
652 | ] -33.3 MCshow | |
653 | 1.000 UL | |
654 | LTb | |
655 | 570 4077 N | |
656 | 0 600 V | |
657 | 963 0 V | |
658 | 0 -600 V | |
659 | -963 0 V | |
660 | Z stroke | |
661 | 570 4577 M | |
662 | 963 0 V | |
663 | 1.000 UP | |
664 | stroke | |
665 | LT0 | |
666 | LTb | |
667 | 1110 4527 M | |
668 | [ [(Helvetica) 100.0 0.0 true true 0 (Exp 1)] | |
669 | ] -33.3 MRshow | |
670 | LT0 | |
671 | 1170 4527 M | |
672 | 303 0 V | |
673 | 696 442 M | |
674 | 187 43 V | |
675 | 186 92 V | |
676 | 186 82 V | |
677 | 1118 526 V | |
678 | 1863 865 V | |
679 | 696 442 Pls | |
680 | 883 485 Pls | |
681 | 1069 577 Pls | |
682 | 1255 659 Pls | |
683 | 2373 1185 Pls | |
684 | 4236 2050 Pls | |
685 | 1321 4527 Pls | |
686 | 1.000 UP | |
687 | 1.000 UL | |
688 | LT1 | |
689 | LTb | |
690 | 1110 4427 M | |
691 | [ [(Helvetica) 100.0 0.0 true true 0 (Exp 2)] | |
692 | ] -33.3 MRshow | |
693 | LT1 | |
694 | 1170 4427 M | |
695 | 303 0 V | |
696 | 696 583 M | |
697 | 187 77 V | |
698 | 186 155 V | |
699 | 186 103 V | |
700 | 1118 660 V | |
701 | 4236 2684 L | |
702 | 696 583 Crs | |
703 | 883 660 Crs | |
704 | 1069 815 Crs | |
705 | 1255 918 Crs | |
706 | 2373 1578 Crs | |
707 | 4236 2684 Crs | |
708 | 1321 4427 Crs | |
709 | 1.000 UP | |
710 | 1.000 UL | |
711 | LT2 | |
712 | LTb | |
713 | 1110 4327 M | |
714 | [ [(Helvetica) 100.0 0.0 true true 0 (Exp 3)] | |
715 | ] -33.3 MRshow | |
716 | LT2 | |
717 | 1170 4327 M | |
718 | 303 0 V | |
719 | 696 521 M | |
720 | 883 726 L | |
721 | 186 189 V | |
722 | 186 188 V | |
723 | 2373 2361 L | |
724 | 4236 4119 L | |
725 | 696 521 Star | |
726 | 883 726 Star | |
727 | 1069 915 Star | |
728 | 1255 1103 Star | |
729 | 2373 2361 Star | |
730 | 4236 4119 Star | |
731 | 1321 4327 Star | |
732 | 1.000 UP | |
733 | 1.000 UL | |
734 | LT3 | |
735 | LTb | |
736 | 1110 4227 M | |
737 | [ [(Helvetica) 100.0 0.0 true true 0 (Exp 4)] | |
738 | ] -33.3 MRshow | |
739 | LT3 | |
740 | 1170 4227 M | |
741 | 303 0 V | |
742 | 696 456 M | |
743 | 187 23 V | |
744 | 186 30 V | |
745 | 186 28 V | |
746 | 373 53 V | |
747 | 372 53 V | |
748 | 745 129 V | |
749 | 746 108 V | |
750 | 2980 460 V | |
751 | 559 128 V | |
752 | 696 456 Box | |
753 | 883 479 Box | |
754 | 1069 509 Box | |
755 | 1255 537 Box | |
756 | 1628 590 Box | |
757 | 2000 643 Box | |
758 | 2745 772 Box | |
759 | 3491 880 Box | |
760 | 6471 1340 Box | |
761 | 1321 4227 Box | |
762 | 1.000 UP | |
763 | 1.000 UL | |
764 | LT4 | |
765 | LTb | |
766 | 1110 4127 M | |
767 | [ [(Helvetica) 100.0 0.0 true true 0 (Exp 4bis)] | |
768 | ] -33.3 MRshow | |
769 | LT4 | |
770 | 1170 4127 M | |
771 | 303 0 V | |
772 | 696 457 M | |
773 | 187 67 V | |
774 | 186 69 V | |
775 | 186 60 V | |
776 | 373 146 V | |
777 | 372 99 V | |
778 | 745 248 V | |
779 | 746 256 V | |
780 | 2980 957 V | |
781 | 559 198 V | |
782 | 696 457 BoxF | |
783 | 883 524 BoxF | |
784 | 1069 593 BoxF | |
785 | 1255 653 BoxF | |
786 | 1628 799 BoxF | |
787 | 2000 898 BoxF | |
788 | 2745 1146 BoxF | |
789 | 3491 1402 BoxF | |
790 | 6471 2359 BoxF | |
791 | 1321 4127 BoxF | |
792 | 1.000 UL | |
793 | LTb | |
794 | 510 4740 N | |
795 | 510 300 L | |
796 | 6520 0 V | |
797 | 0 4440 V | |
798 | -6520 0 V | |
799 | Z stroke | |
800 | 1.000 UP | |
801 | 1.000 UL | |
802 | LTb | |
803 | stroke | |
804 | grestore | |
805 | end | |
806 | showpage | |
807 | %%Trailer | |
808 | %%DocumentFonts: Helvetica | |
809 | %%Pages: 1 |
0 | set terminal postscript colour enhanced landscape lw 1 10 | |
1 | set key box left top width 1 title 'Experiment' | |
2 | set xlabel 'Payload size (UDP packet)' | |
3 | set ylabel 'Processing cost per packet (10E-6 sec)' | |
4 | set title 'Processing cost for a 4-node topology' | |
5 | set xrange [0:1500] | |
6 | plot \ | |
7 | 'results-simu.txt' index 0 every ::24::31 using 1:3 title "Exp 1" with linespoints, \ | |
8 | 'results-simu.txt' index 1 every ::24::31 using 1:3 title "Exp 2" with linespoints, \ | |
9 | 'results-simu.txt' index 3 every ::24::31 using 1:3 title "Exp 3" with linespoints, \ | |
10 | 'results.txt' index 0 every ::39::51 using ($4-42):($10/$3) title "Exp 4" with linespoints, \ | |
11 | 'results.txt' index 1 every ::39::51 using ($4-42):($10/$3) title "Exp 4bis" with linespoints | |
12 |
0 | %!PS-Adobe-2.0 | |
1 | %%Creator: gnuplot 4.2 patchlevel 3 | |
2 | %%CreationDate: Mon Aug 16 13:02:31 2010 | |
3 | %%DocumentFonts: (atend) | |
4 | %%BoundingBox: 50 50 554 770 | |
5 | %%Orientation: Landscape | |
6 | %%Pages: (atend) | |
7 | %%EndComments | |
8 | %%BeginProlog | |
9 | /gnudict 256 dict def | |
10 | gnudict begin | |
11 | % | |
12 | % The following 6 true/false flags may be edited by hand if required | |
13 | % The unit line width may also be changed | |
14 | % | |
15 | /Color true def | |
16 | /Blacktext false def | |
17 | /Solid false def | |
18 | /Dashlength 1 def | |
19 | /Landscape true def | |
20 | /Level1 false def | |
21 | /Rounded false def | |
22 | /TransparentPatterns false def | |
23 | /gnulinewidth 5.000 def | |
24 | /userlinewidth gnulinewidth def | |
25 | % | |
26 | /vshift -33 def | |
27 | /dl1 { | |
28 | 10.0 Dashlength mul mul | |
29 | Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if | |
30 | } def | |
31 | /dl2 { | |
32 | 10.0 Dashlength mul mul | |
33 | Rounded { currentlinewidth 0.75 mul add } if | |
34 | } def | |
35 | /hpt_ 31.5 def | |
36 | /vpt_ 31.5 def | |
37 | /hpt hpt_ def | |
38 | /vpt vpt_ def | |
39 | Level1 {} { | |
40 | /SDict 10 dict def | |
41 | systemdict /pdfmark known not { | |
42 | userdict /pdfmark systemdict /cleartomark get put | |
43 | } if | |
44 | SDict begin [ | |
45 | /Title () | |
46 | /Subject (gnuplot plot) | |
47 | /Creator (gnuplot 4.2 patchlevel 3 ) | |
48 | /Author (Martin_Hernan Ferrari,L133,2417) | |
49 | % /Producer (gnuplot) | |
50 | % /Keywords () | |
51 | /CreationDate (Mon Aug 16 13:02:31 2010) | |
52 | /DOCINFO pdfmark | |
53 | end | |
54 | } ifelse | |
55 | % | |
56 | % Gnuplot Prolog Version 4.2 (August 2006) | |
57 | % | |
58 | /M {moveto} bind def | |
59 | /L {lineto} bind def | |
60 | /R {rmoveto} bind def | |
61 | /V {rlineto} bind def | |
62 | /N {newpath moveto} bind def | |
63 | /Z {closepath} bind def | |
64 | /C {setrgbcolor} bind def | |
65 | /f {rlineto fill} bind def | |
66 | /vpt2 vpt 2 mul def | |
67 | /hpt2 hpt 2 mul def | |
68 | /Lshow {currentpoint stroke M 0 vshift R | |
69 | Blacktext {gsave 0 setgray show grestore} {show} ifelse} def | |
70 | /Rshow {currentpoint stroke M dup stringwidth pop neg vshift R | |
71 | Blacktext {gsave 0 setgray show grestore} {show} ifelse} def | |
72 | /Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R | |
73 | Blacktext {gsave 0 setgray show grestore} {show} ifelse} def | |
74 | /UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def | |
75 | /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def | |
76 | /DL {Color {setrgbcolor Solid {pop []} if 0 setdash} | |
77 | {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def | |
78 | /BL {stroke userlinewidth 2 mul setlinewidth | |
79 | Rounded {1 setlinejoin 1 setlinecap} if} def | |
80 | /AL {stroke userlinewidth 2 div setlinewidth | |
81 | Rounded {1 setlinejoin 1 setlinecap} if} def | |
82 | /UL {dup gnulinewidth mul /userlinewidth exch def | |
83 | dup 1 lt {pop 1} if 10 mul /udl exch def} def | |
84 | /PL {stroke userlinewidth setlinewidth | |
85 | Rounded {1 setlinejoin 1 setlinecap} if} def | |
86 | % Default Line colors | |
87 | /LCw {1 1 1} def | |
88 | /LCb {0 0 0} def | |
89 | /LCa {0 0 0} def | |
90 | /LC0 {1 0 0} def | |
91 | /LC1 {0 1 0} def | |
92 | /LC2 {0 0 1} def | |
93 | /LC3 {1 0 1} def | |
94 | /LC4 {0 1 1} def | |
95 | /LC5 {1 1 0} def | |
96 | /LC6 {0 0 0} def | |
97 | /LC7 {1 0.3 0} def | |
98 | /LC8 {0.5 0.5 0.5} def | |
99 | % Default Line Types | |
100 | /LTw {PL [] 1 setgray} def | |
101 | /LTb {BL [] LCb DL} def | |
102 | /LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def | |
103 | /LT0 {PL [] LC0 DL} def | |
104 | /LT1 {PL [4 dl1 2 dl2] LC1 DL} def | |
105 | /LT2 {PL [2 dl1 3 dl2] LC2 DL} def | |
106 | /LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def | |
107 | /LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def | |
108 | /LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def | |
109 | /LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def | |
110 | /LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def | |
111 | /LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def | |
112 | /Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def | |
113 | /Dia {stroke [] 0 setdash 2 copy vpt add M | |
114 | hpt neg vpt neg V hpt vpt neg V | |
115 | hpt vpt V hpt neg vpt V closepath stroke | |
116 | Pnt} def | |
117 | /Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V | |
118 | currentpoint stroke M | |
119 | hpt neg vpt neg R hpt2 0 V stroke | |
120 | } def | |
121 | /Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M | |
122 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V | |
123 | hpt2 neg 0 V closepath stroke | |
124 | Pnt} def | |
125 | /Crs {stroke [] 0 setdash exch hpt sub exch vpt add M | |
126 | hpt2 vpt2 neg V currentpoint stroke M | |
127 | hpt2 neg 0 R hpt2 vpt2 V stroke} def | |
128 | /TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M | |
129 | hpt neg vpt -1.62 mul V | |
130 | hpt 2 mul 0 V | |
131 | hpt neg vpt 1.62 mul V closepath stroke | |
132 | Pnt} def | |
133 | /Star {2 copy Pls Crs} def | |
134 | /BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M | |
135 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V | |
136 | hpt2 neg 0 V closepath fill} def | |
137 | /TriUF {stroke [] 0 setdash vpt 1.12 mul add M | |
138 | hpt neg vpt -1.62 mul V | |
139 | hpt 2 mul 0 V | |
140 | hpt neg vpt 1.62 mul V closepath fill} def | |
141 | /TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M | |
142 | hpt neg vpt 1.62 mul V | |
143 | hpt 2 mul 0 V | |
144 | hpt neg vpt -1.62 mul V closepath stroke | |
145 | Pnt} def | |
146 | /TriDF {stroke [] 0 setdash vpt 1.12 mul sub M | |
147 | hpt neg vpt 1.62 mul V | |
148 | hpt 2 mul 0 V | |
149 | hpt neg vpt -1.62 mul V closepath fill} def | |
150 | /DiaF {stroke [] 0 setdash vpt add M | |
151 | hpt neg vpt neg V hpt vpt neg V | |
152 | hpt vpt V hpt neg vpt V closepath fill} def | |
153 | /Pent {stroke [] 0 setdash 2 copy gsave | |
154 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat | |
155 | closepath stroke grestore Pnt} def | |
156 | /PentF {stroke [] 0 setdash gsave | |
157 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat | |
158 | closepath fill grestore} def | |
159 | /Circle {stroke [] 0 setdash 2 copy | |
160 | hpt 0 360 arc stroke Pnt} def | |
161 | /CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def | |
162 | /C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def | |
163 | /C1 {BL [] 0 setdash 2 copy moveto | |
164 | 2 copy vpt 0 90 arc closepath fill | |
165 | vpt 0 360 arc closepath} bind def | |
166 | /C2 {BL [] 0 setdash 2 copy moveto | |
167 | 2 copy vpt 90 180 arc closepath fill | |
168 | vpt 0 360 arc closepath} bind def | |
169 | /C3 {BL [] 0 setdash 2 copy moveto | |
170 | 2 copy vpt 0 180 arc closepath fill | |
171 | vpt 0 360 arc closepath} bind def | |
172 | /C4 {BL [] 0 setdash 2 copy moveto | |
173 | 2 copy vpt 180 270 arc closepath fill | |
174 | vpt 0 360 arc closepath} bind def | |
175 | /C5 {BL [] 0 setdash 2 copy moveto | |
176 | 2 copy vpt 0 90 arc | |
177 | 2 copy moveto | |
178 | 2 copy vpt 180 270 arc closepath fill | |
179 | vpt 0 360 arc} bind def | |
180 | /C6 {BL [] 0 setdash 2 copy moveto | |
181 | 2 copy vpt 90 270 arc closepath fill | |
182 | vpt 0 360 arc closepath} bind def | |
183 | /C7 {BL [] 0 setdash 2 copy moveto | |
184 | 2 copy vpt 0 270 arc closepath fill | |
185 | vpt 0 360 arc closepath} bind def | |
186 | /C8 {BL [] 0 setdash 2 copy moveto | |
187 | 2 copy vpt 270 360 arc closepath fill | |
188 | vpt 0 360 arc closepath} bind def | |
189 | /C9 {BL [] 0 setdash 2 copy moveto | |
190 | 2 copy vpt 270 450 arc closepath fill | |
191 | vpt 0 360 arc closepath} bind def | |
192 | /C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill | |
193 | 2 copy moveto | |
194 | 2 copy vpt 90 180 arc closepath fill | |
195 | vpt 0 360 arc closepath} bind def | |
196 | /C11 {BL [] 0 setdash 2 copy moveto | |
197 | 2 copy vpt 0 180 arc closepath fill | |
198 | 2 copy moveto | |
199 | 2 copy vpt 270 360 arc closepath fill | |
200 | vpt 0 360 arc closepath} bind def | |
201 | /C12 {BL [] 0 setdash 2 copy moveto | |
202 | 2 copy vpt 180 360 arc closepath fill | |
203 | vpt 0 360 arc closepath} bind def | |
204 | /C13 {BL [] 0 setdash 2 copy moveto | |
205 | 2 copy vpt 0 90 arc closepath fill | |
206 | 2 copy moveto | |
207 | 2 copy vpt 180 360 arc closepath fill | |
208 | vpt 0 360 arc closepath} bind def | |
209 | /C14 {BL [] 0 setdash 2 copy moveto | |
210 | 2 copy vpt 90 360 arc closepath fill | |
211 | vpt 0 360 arc} bind def | |
212 | /C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill | |
213 | vpt 0 360 arc closepath} bind def | |
214 | /Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto | |
215 | neg 0 rlineto closepath} bind def | |
216 | /Square {dup Rec} bind def | |
217 | /Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def | |
218 | /S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def | |
219 | /S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def | |
220 | /S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def | |
221 | /S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def | |
222 | /S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def | |
223 | /S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill | |
224 | exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def | |
225 | /S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def | |
226 | /S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill | |
227 | 2 copy vpt Square fill Bsquare} bind def | |
228 | /S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def | |
229 | /S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def | |
230 | /S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill | |
231 | Bsquare} bind def | |
232 | /S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill | |
233 | Bsquare} bind def | |
234 | /S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def | |
235 | /S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill | |
236 | 2 copy vpt Square fill Bsquare} bind def | |
237 | /S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill | |
238 | 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def | |
239 | /S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def | |
240 | /D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def | |
241 | /D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def | |
242 | /D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def | |
243 | /D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def | |
244 | /D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def | |
245 | /D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def | |
246 | /D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def | |
247 | /D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def | |
248 | /D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def | |
249 | /D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def | |
250 | /D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def | |
251 | /D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def | |
252 | /D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def | |
253 | /D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def | |
254 | /D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def | |
255 | /D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def | |
256 | /DiaE {stroke [] 0 setdash vpt add M | |
257 | hpt neg vpt neg V hpt vpt neg V | |
258 | hpt vpt V hpt neg vpt V closepath stroke} def | |
259 | /BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M | |
260 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V | |
261 | hpt2 neg 0 V closepath stroke} def | |
262 | /TriUE {stroke [] 0 setdash vpt 1.12 mul add M | |
263 | hpt neg vpt -1.62 mul V | |
264 | hpt 2 mul 0 V | |
265 | hpt neg vpt 1.62 mul V closepath stroke} def | |
266 | /TriDE {stroke [] 0 setdash vpt 1.12 mul sub M | |
267 | hpt neg vpt 1.62 mul V | |
268 | hpt 2 mul 0 V | |
269 | hpt neg vpt -1.62 mul V closepath stroke} def | |
270 | /PentE {stroke [] 0 setdash gsave | |
271 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat | |
272 | closepath stroke grestore} def | |
273 | /CircE {stroke [] 0 setdash | |
274 | hpt 0 360 arc stroke} def | |
275 | /Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def | |
276 | /DiaW {stroke [] 0 setdash vpt add M | |
277 | hpt neg vpt neg V hpt vpt neg V | |
278 | hpt vpt V hpt neg vpt V Opaque stroke} def | |
279 | /BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M | |
280 | 0 vpt2 neg V hpt2 0 V 0 vpt2 V | |
281 | hpt2 neg 0 V Opaque stroke} def | |
282 | /TriUW {stroke [] 0 setdash vpt 1.12 mul add M | |
283 | hpt neg vpt -1.62 mul V | |
284 | hpt 2 mul 0 V | |
285 | hpt neg vpt 1.62 mul V Opaque stroke} def | |
286 | /TriDW {stroke [] 0 setdash vpt 1.12 mul sub M | |
287 | hpt neg vpt 1.62 mul V | |
288 | hpt 2 mul 0 V | |
289 | hpt neg vpt -1.62 mul V Opaque stroke} def | |
290 | /PentW {stroke [] 0 setdash gsave | |
291 | translate 0 hpt M 4 {72 rotate 0 hpt L} repeat | |
292 | Opaque stroke grestore} def | |
293 | /CircW {stroke [] 0 setdash | |
294 | hpt 0 360 arc Opaque stroke} def | |
295 | /BoxFill {gsave Rec 1 setgray fill grestore} def | |
296 | /Density { | |
297 | /Fillden exch def | |
298 | currentrgbcolor | |
299 | /ColB exch def /ColG exch def /ColR exch def | |
300 | /ColR ColR Fillden mul Fillden sub 1 add def | |
301 | /ColG ColG Fillden mul Fillden sub 1 add def | |
302 | /ColB ColB Fillden mul Fillden sub 1 add def | |
303 | ColR ColG ColB setrgbcolor} def | |
304 | /BoxColFill {gsave Rec PolyFill} def | |
305 | /PolyFill {gsave Density fill grestore grestore} def | |
306 | /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def | |
307 | % | |
308 | % PostScript Level 1 Pattern Fill routine for rectangles | |
309 | % Usage: x y w h s a XX PatternFill | |
310 | % x,y = lower left corner of box to be filled | |
311 | % w,h = width and height of box | |
312 | % a = angle in degrees between lines and x-axis | |
313 | % XX = 0/1 for no/yes cross-hatch | |
314 | % | |
315 | /PatternFill {gsave /PFa [ 9 2 roll ] def | |
316 | PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate | |
317 | PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec | |
318 | gsave 1 setgray fill grestore clip | |
319 | currentlinewidth 0.5 mul setlinewidth | |
320 | /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def | |
321 | 0 0 M PFa 5 get rotate PFs -2 div dup translate | |
322 | 0 1 PFs PFa 4 get div 1 add floor cvi | |
323 | {PFa 4 get mul 0 M 0 PFs V} for | |
324 | 0 PFa 6 get ne { | |
325 | 0 1 PFs PFa 4 get div 1 add floor cvi | |
326 | {PFa 4 get mul 0 2 1 roll M PFs 0 V} for | |
327 | } if | |
328 | stroke grestore} def | |
329 | % | |
330 | /languagelevel where | |
331 | {pop languagelevel} {1} ifelse | |
332 | 2 lt | |
333 | {/InterpretLevel1 true def} | |
334 | {/InterpretLevel1 Level1 def} | |
335 | ifelse | |
336 | % | |
337 | % PostScript level 2 pattern fill definitions | |
338 | % | |
339 | /Level2PatternFill { | |
340 | /Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} | |
341 | bind def | |
342 | /KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def | |
343 | << Tile8x8 | |
344 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} | |
345 | >> matrix makepattern | |
346 | /Pat1 exch def | |
347 | << Tile8x8 | |
348 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke | |
349 | 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} | |
350 | >> matrix makepattern | |
351 | /Pat2 exch def | |
352 | << Tile8x8 | |
353 | /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L | |
354 | 8 8 L 8 0 L 0 0 L fill} | |
355 | >> matrix makepattern | |
356 | /Pat3 exch def | |
357 | << Tile8x8 | |
358 | /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L | |
359 | 0 12 M 12 0 L stroke} | |
360 | >> matrix makepattern | |
361 | /Pat4 exch def | |
362 | << Tile8x8 | |
363 | /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L | |
364 | 0 -4 M 12 8 L stroke} | |
365 | >> matrix makepattern | |
366 | /Pat5 exch def | |
367 | << Tile8x8 | |
368 | /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L | |
369 | 0 12 M 8 -4 L 4 12 M 10 0 L stroke} | |
370 | >> matrix makepattern | |
371 | /Pat6 exch def | |
372 | << Tile8x8 | |
373 | /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L | |
374 | 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} | |
375 | >> matrix makepattern | |
376 | /Pat7 exch def | |
377 | << Tile8x8 | |
378 | /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L | |
379 | 12 0 M -4 8 L 12 4 M 0 10 L stroke} | |
380 | >> matrix makepattern | |
381 | /Pat8 exch def | |
382 | << Tile8x8 | |
383 | /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L | |
384 | -4 0 M 12 8 L -4 4 M 8 10 L stroke} | |
385 | >> matrix makepattern | |
386 | /Pat9 exch def | |
387 | /Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def | |
388 | /Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def | |
389 | /Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def | |
390 | /Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def | |
391 | /Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def | |
392 | /Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def | |
393 | /Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def | |
394 | } def | |
395 | % | |
396 | % | |
397 | %End of PostScript Level 2 code | |
398 | % | |
399 | /PatternBgnd { | |
400 | TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse | |
401 | } def | |
402 | % | |
403 | % Substitute for Level 2 pattern fill codes with | |
404 | % grayscale if Level 2 support is not selected. | |
405 | % | |
406 | /Level1PatternFill { | |
407 | /Pattern1 {0.250 Density} bind def | |
408 | /Pattern2 {0.500 Density} bind def | |
409 | /Pattern3 {0.750 Density} bind def | |
410 | /Pattern4 {0.125 Density} bind def | |
411 | /Pattern5 {0.375 Density} bind def | |
412 | /Pattern6 {0.625 Density} bind def | |
413 | /Pattern7 {0.875 Density} bind def | |
414 | } def | |
415 | % | |
416 | % Now test for support of Level 2 code | |
417 | % | |
418 | Level1 {Level1PatternFill} {Level2PatternFill} ifelse | |
419 | % | |
420 | /Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont | |
421 | dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall | |
422 | currentdict end definefont pop | |
423 | /MFshow { | |
424 | { dup 5 get 3 ge | |
425 | { 5 get 3 eq {gsave} {grestore} ifelse } | |
426 | {dup dup 0 get findfont exch 1 get scalefont setfont | |
427 | [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 | |
428 | get exch 4 get {show} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq | |
429 | {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 | |
430 | get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div | |
431 | dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get | |
432 | show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop | |
433 | pop aload pop M} ifelse }ifelse }ifelse } | |
434 | ifelse } | |
435 | forall} bind def | |
436 | /MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } | |
437 | {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont | |
438 | 6 get stringwidth pop add} {pop} ifelse} ifelse} forall} bind def | |
439 | /MLshow { currentpoint stroke M | |
440 | 0 exch R | |
441 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def | |
442 | /MRshow { currentpoint stroke M | |
443 | exch dup MFwidth neg 3 -1 roll R | |
444 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def | |
445 | /MCshow { currentpoint stroke M | |
446 | exch dup MFwidth -2 div 3 -1 roll R | |
447 | Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def | |
448 | /XYsave { [( ) 1 2 true false 3 ()] } bind def | |
449 | /XYrestore { [( ) 1 2 true false 4 ()] } bind def | |
450 | end | |
451 | %%EndProlog | |
452 | %%Page: 1 1 | |
453 | gnudict begin | |
454 | gsave | |
455 | 50 50 translate | |
456 | 0.100 0.100 scale | |
457 | 90 rotate | |
458 | 0 -5040 translate | |
459 | 0 setgray | |
460 | newpath | |
461 | (Helvetica) findfont 100 scalefont setfont | |
462 | 1.000 UL | |
463 | LTb | |
464 | 450 300 M | |
465 | 63 0 V | |
466 | 6517 0 R | |
467 | -63 0 V | |
468 | stroke | |
469 | 390 300 M | |
470 | [ [(Helvetica) 100.0 0.0 true true 0 ( 10)] | |
471 | ] -33.3 MRshow | |
472 | 1.000 UL | |
473 | LTb | |
474 | 450 1040 M | |
475 | 63 0 V | |
476 | 6517 0 R | |
477 | -63 0 V | |
478 | stroke | |
479 | 390 1040 M | |
480 | [ [(Helvetica) 100.0 0.0 true true 0 ( 20)] | |
481 | ] -33.3 MRshow | |
482 | 1.000 UL | |
483 | LTb | |
484 | 450 1780 M | |
485 | 63 0 V | |
486 | 6517 0 R | |
487 | -63 0 V | |
488 | stroke | |
489 | 390 1780 M | |
490 | [ [(Helvetica) 100.0 0.0 true true 0 ( 30)] | |
491 | ] -33.3 MRshow | |
492 | 1.000 UL | |
493 | LTb | |
494 | 450 2520 M | |
495 | 63 0 V | |
496 | 6517 0 R | |
497 | -63 0 V | |
498 | stroke | |
499 | 390 2520 M | |
500 | [ [(Helvetica) 100.0 0.0 true true 0 ( 40)] | |
501 | ] -33.3 MRshow | |
502 | 1.000 UL | |
503 | LTb | |
504 | 450 3260 M | |
505 | 63 0 V | |
506 | 6517 0 R | |
507 | -63 0 V | |
508 | stroke | |
509 | 390 3260 M | |
510 | [ [(Helvetica) 100.0 0.0 true true 0 ( 50)] | |
511 | ] -33.3 MRshow | |
512 | 1.000 UL | |
513 | LTb | |
514 | 450 4000 M | |
515 | 63 0 V | |
516 | 6517 0 R | |
517 | -63 0 V | |
518 | stroke | |
519 | 390 4000 M | |
520 | [ [(Helvetica) 100.0 0.0 true true 0 ( 60)] | |
521 | ] -33.3 MRshow | |
522 | 1.000 UL | |
523 | LTb | |
524 | 450 4740 M | |
525 | 63 0 V | |
526 | 6517 0 R | |
527 | -63 0 V | |
528 | stroke | |
529 | 390 4740 M | |
530 | [ [(Helvetica) 100.0 0.0 true true 0 ( 70)] | |
531 | ] -33.3 MRshow | |
532 | 1.000 UL | |
533 | LTb | |
534 | 450 300 M | |
535 | 0 63 V | |
536 | 0 4377 R | |
537 | 0 -63 V | |
538 | stroke | |
539 | 450 200 M | |
540 | [ [(Helvetica) 100.0 0.0 true true 0 ( 0)] | |
541 | ] -33.3 MCshow | |
542 | 1.000 UL | |
543 | LTb | |
544 | 1327 300 M | |
545 | 0 63 V | |
546 | 0 4377 R | |
547 | 0 -63 V | |
548 | stroke | |
549 | 1327 200 M | |
550 | [ [(Helvetica) 100.0 0.0 true true 0 ( 200)] | |
551 | ] -33.3 MCshow | |
552 | 1.000 UL | |
553 | LTb | |
554 | 2205 300 M | |
555 | 0 63 V | |
556 | 0 4377 R | |
557 | 0 -63 V | |
558 | stroke | |
559 | 2205 200 M | |
560 | [ [(Helvetica) 100.0 0.0 true true 0 ( 400)] | |
561 | ] -33.3 MCshow | |
562 | 1.000 UL | |
563 | LTb | |
564 | 3082 300 M | |
565 | 0 63 V | |
566 | 0 4377 R | |
567 | 0 -63 V | |
568 | stroke | |
569 | 3082 200 M | |
570 | [ [(Helvetica) 100.0 0.0 true true 0 ( 600)] | |
571 | ] -33.3 MCshow | |
572 | 1.000 UL | |
573 | LTb | |
574 | 3959 300 M | |
575 | 0 63 V | |
576 | 0 4377 R | |
577 | 0 -63 V | |
578 | stroke | |
579 | 3959 200 M | |
580 | [ [(Helvetica) 100.0 0.0 true true 0 ( 800)] | |
581 | ] -33.3 MCshow | |
582 | 1.000 UL | |
583 | LTb | |
584 | 4837 300 M | |
585 | 0 63 V | |
586 | 0 4377 R | |
587 | 0 -63 V | |
588 | stroke | |
589 | 4837 200 M | |
590 | [ [(Helvetica) 100.0 0.0 true true 0 ( 1000)] | |
591 | ] -33.3 MCshow | |
592 | 1.000 UL | |
593 | LTb | |
594 | 5714 300 M | |
595 | 0 63 V | |
596 | 0 4377 R | |
597 | 0 -63 V | |
598 | stroke | |
599 | 5714 200 M | |
600 | [ [(Helvetica) 100.0 0.0 true true 0 ( 1200)] | |
601 | ] -33.3 MCshow | |
602 | 1.000 UL | |
603 | LTb | |
604 | 6591 300 M | |
605 | 0 63 V | |
606 | 0 4377 R | |
607 | 0 -63 V | |
608 | stroke | |
609 | 6591 200 M | |
610 | [ [(Helvetica) 100.0 0.0 true true 0 ( 1400)] | |
611 | ] -33.3 MCshow | |
612 | 1.000 UL | |
613 | LTb | |
614 | 1.000 UL | |
615 | LTb | |
616 | 450 4740 N | |
617 | 450 300 L | |
618 | 6580 0 V | |
619 | 0 4440 V | |
620 | -6580 0 V | |
621 | Z stroke | |
622 | LCb setrgbcolor | |
623 | 100 2520 M | |
624 | currentpoint gsave translate 90 rotate 0 0 moveto | |
625 | [ [(Helvetica) 100.0 0.0 true true 0 (Processing cost per packet \(10E-6 sec\))] | |
626 | ] -33.3 MCshow | |
627 | grestore | |
628 | LTb | |
629 | LCb setrgbcolor | |
630 | 3740 50 M | |
631 | [ [(Helvetica) 100.0 0.0 true true 0 (Payload size \(UDP packet\))] | |
632 | ] -33.3 MCshow | |
633 | LTb | |
634 | 3740 4890 M | |
635 | [ [(Helvetica) 100.0 0.0 true true 0 (Processing cost for a 4-node topology)] | |
636 | ] -33.3 MCshow | |
637 | 1.000 UP | |
638 | 1.000 UL | |
639 | LTb | |
640 | 991 4627 M | |
641 | [ [(Helvetica) 100.0 0.0 true true 0 (Experiment)] | |
642 | ] -33.3 MCshow | |
643 | 1.000 UL | |
644 | LTb | |
645 | 510 4077 N | |
646 | 0 600 V | |
647 | 963 0 V | |
648 | 0 -600 V | |
649 | -963 0 V | |
650 | Z stroke | |
651 | 510 4577 M | |
652 | 963 0 V | |
653 | 1.000 UP | |
654 | stroke | |
655 | LT0 | |
656 | LTb | |
657 | 1050 4527 M | |
658 | [ [(Helvetica) 100.0 0.0 true true 0 (Exp 1)] | |
659 | ] -33.3 MRshow | |
660 | LT0 | |
661 | 1110 4527 M | |
662 | 303 0 V | |
663 | 6591 1727 M | |
664 | 4837 1653 L | |
665 | 3082 1640 L | |
666 | -877 -31 V | |
667 | 889 1587 L | |
668 | -88 -21 V | |
669 | 582 1780 L | |
670 | -88 788 V | |
671 | 6591 1727 Pls | |
672 | 4837 1653 Pls | |
673 | 3082 1640 Pls | |
674 | 2205 1609 Pls | |
675 | 889 1587 Pls | |
676 | 801 1566 Pls | |
677 | 582 1780 Pls | |
678 | 494 2568 Pls | |
679 | 1261 4527 Pls | |
680 | 1.000 UP | |
681 | 1.000 UL | |
682 | LT1 | |
683 | LTb | |
684 | 1050 4427 M | |
685 | [ [(Helvetica) 100.0 0.0 true true 0 (Exp 2)] | |
686 | ] -33.3 MRshow | |
687 | LT1 | |
688 | 1110 4427 M | |
689 | 303 0 V | |
690 | 6591 3321 M | |
691 | 4837 3166 L | |
692 | -1755 70 V | |
693 | 2205 2635 L | |
694 | 889 2623 L | |
695 | 801 2523 L | |
696 | 582 2485 L | |
697 | -88 778 V | |
698 | 6591 3321 Crs | |
699 | 4837 3166 Crs | |
700 | 3082 3236 Crs | |
701 | 2205 2635 Crs | |
702 | 889 2623 Crs | |
703 | 801 2523 Crs | |
704 | 582 2485 Crs | |
705 | 494 3263 Crs | |
706 | 1261 4427 Crs | |
707 | 1.000 UP | |
708 | 1.000 UL | |
709 | LT2 | |
710 | LTb | |
711 | 1050 4327 M | |
712 | [ [(Helvetica) 100.0 0.0 true true 0 (Exp 3)] | |
713 | ] -33.3 MRshow | |
714 | LT2 | |
715 | 1110 4327 M | |
716 | 303 0 V | |
717 | 5178 364 R | |
718 | 4837 4466 L | |
719 | 3082 4124 L | |
720 | 2205 3891 L | |
721 | 889 3743 L | |
722 | 801 3618 L | |
723 | 582 3562 L | |
724 | -88 787 V | |
725 | 6591 4691 Star | |
726 | 4837 4466 Star | |
727 | 3082 4124 Star | |
728 | 2205 3891 Star | |
729 | 889 3743 Star | |
730 | 801 3618 Star | |
731 | 582 3562 Star | |
732 | 494 4349 Star | |
733 | 1261 4327 Star | |
734 | 1.000 UP | |
735 | 1.000 UL | |
736 | LT3 | |
737 | LTb | |
738 | 1050 4227 M | |
739 | [ [(Helvetica) 100.0 0.0 true true 0 (Exp 4)] | |
740 | ] -33.3 MRshow | |
741 | LT3 | |
742 | 1110 4227 M | |
743 | 303 0 V | |
744 | 450 871 M | |
745 | 4 44 V | |
746 | 5 -25 V | |
747 | 9 6 V | |
748 | 17 67 V | |
749 | 35 -75 V | |
750 | 70 13 V | |
751 | 731 886 L | |
752 | 280 12 V | |
753 | 562 5 V | |
754 | 1123 22 V | |
755 | 2246 17 V | |
756 | 1904 48 V | |
757 | 450 871 Box | |
758 | 454 915 Box | |
759 | 459 890 Box | |
760 | 468 896 Box | |
761 | 485 963 Box | |
762 | 520 888 Box | |
763 | 590 901 Box | |
764 | 731 886 Box | |
765 | 1011 898 Box | |
766 | 1573 903 Box | |
767 | 2696 925 Box | |
768 | 4942 942 Box | |
769 | 6846 990 Box | |
770 | 1261 4227 Box | |
771 | 1.000 UP | |
772 | 1.000 UL | |
773 | LT4 | |
774 | LTb | |
775 | 1050 4127 M | |
776 | [ [(Helvetica) 100.0 0.0 true true 0 (Exp 4bis)] | |
777 | ] -33.3 MRshow | |
778 | LT4 | |
779 | 1110 4127 M | |
780 | 303 0 V | |
781 | 450 1518 M | |
782 | 4 20 V | |
783 | 5 9 V | |
784 | 9 3 V | |
785 | 17 -10 V | |
786 | 35 5 V | |
787 | 70 -4 V | |
788 | 141 8 V | |
789 | 280 2 V | |
790 | 562 15 V | |
791 | 1123 1 V | |
792 | 2246 50 V | |
793 | 1904 12 V | |
794 | 450 1518 BoxF | |
795 | 454 1538 BoxF | |
796 | 459 1547 BoxF | |
797 | 468 1550 BoxF | |
798 | 485 1540 BoxF | |
799 | 520 1545 BoxF | |
800 | 590 1541 BoxF | |
801 | 731 1549 BoxF | |
802 | 1011 1551 BoxF | |
803 | 1573 1566 BoxF | |
804 | 2696 1567 BoxF | |
805 | 4942 1617 BoxF | |
806 | 6846 1629 BoxF | |
807 | 1261 4127 BoxF | |
808 | 1.000 UL | |
809 | LTb | |
810 | 450 4740 N | |
811 | 450 300 L | |
812 | 6580 0 V | |
813 | 0 4440 V | |
814 | -6580 0 V | |
815 | Z stroke | |
816 | 1.000 UP | |
817 | 1.000 UL | |
818 | LTb | |
819 | stroke | |
820 | grestore | |
821 | end | |
822 | showpage | |
823 | %%Trailer | |
824 | %%DocumentFonts: Helvetica | |
825 | %%Pages: 1 |
0 | Nodes,Bytes received,Packets received,Packet size,Payload size,Errors,Min delay,Average delay,Max delay,Jitter,Total time,Link-level bandwidth,Command line | |
1 | 1,35958426,856153,42,0,0,-1,0,0,,10000007,28766720,--format=csv -n 1 -s 42 --use-p2p | |
2 | 1,36061242,858601,42,0,0,-1,0,0,,10000004,28848982,--format=csv -n 1 -s 42 | |
3 | 1,36350867,845369,43,1,0,-1,0,0,,10000009,29080667,--format=csv -n 1 -s 43 --use-p2p | |
4 | 1,36353920,845440,43,1,0,-1,0,0,,10000007,29083115,--format=csv -n 1 -s 43 | |
5 | 1,37097060,843115,44,2,0,-1,0,0,,10000005,29677633,--format=csv -n 1 -s 44 --use-p2p | |
6 | 1,36964840,840110,44,2,0,-1,0,0,,10000003,29571863,--format=csv -n 1 -s 44 | |
7 | 1,38149180,829330,46,4,0,-1,0,0,,10000006,30519325,--format=csv -n 1 -s 46 --use-p2p | |
8 | 1,38546988,837978,46,4,0,-1,0,0,,10000004,30837578,--format=csv -n 1 -s 46 | |
9 | 1,41846900,836938,50,8,0,8,8,672,,10000006,33477499,--format=csv -n 1 -s 50 --use-p2p | |
10 | 1,41930800,838616,50,8,0,8,8,646,,10000010,33544606,--format=csv -n 1 -s 50 | |
11 | 1,48969342,844299,58,16,0,8,8,237,,10000002,39175465,--format=csv -n 1 -s 58 --use-p2p | |
12 | 1,48604464,838008,58,16,0,8,8,669,,10000001,38883567,--format=csv -n 1 -s 58 | |
13 | 1,61989578,837697,74,32,0,8,8,644,,10000009,49591617,--format=csv -n 1 -s 74 --use-p2p | |
14 | 1,62043820,838430,74,32,0,8,8,197,,10000006,49635026,--format=csv -n 1 -s 74 | |
15 | 1,89067030,840255,106,64,0,8,8,198,,10000009,71253559,--format=csv -n 1 -s 106 --use-p2p | |
16 | 1,88529822,835187,106,64,0,8,8,643,,10000008,70823800,--format=csv -n 1 -s 106 | |
17 | 1,141704690,833557,170,128,0,8,8,641,,10000002,113363729,--format=csv -n 1 -s 170 --use-p2p | |
18 | 1,141857690,834457,170,128,0,8,8,204,,10000005,113486095,--format=csv -n 1 -s 170 | |
19 | 1,249269550,836475,298,256,0,8,8,197,,10000011,199415420,--format=csv -n 1 -s 298 --use-p2p | |
20 | 1,248590706,834197,298,256,0,8,8,199,,10000005,198872465,--format=csv -n 1 -s 298 | |
21 | 1,454933720,821180,554,512,0,8,9,199,,10000010,363946612,--format=csv -n 1 -s 554 --use-p2p | |
22 | 1,457866596,826474,554,512,0,8,8,198,,10000006,366293057,--format=csv -n 1 -s 554 | |
23 | 1,865598396,812006,1066,1024,0,8,9,269,,10000005,692478370,--format=csv -n 1 -s 1066 --use-p2p | |
24 | 1,859640522,806417,1066,1024,0,8,9,658,,10000004,687712142,--format=csv -n 1 -s 1066 | |
25 | 1,1189230000,792820,1500,1458,0,9,9,199,,10000004,951383619,--format=csv -n 1 -s 1500 --use-p2p | |
26 | 1,1191405000,794270,1500,1458,0,9,9,519,,10000010,953123046,--format=csv -n 1 -s 1500 | |
27 | 2,32702628,778634,42,0,0,-1,0,0,,10000006,26162086,--format=csv -n 2 -s 42 --use-p2p | |
28 | 2,25154388,598914,42,0,0,-1,0,0,,10000004,20123502,--format=csv -n 2 -s 42 | |
29 | 2,32755207,761749,43,1,0,-1,0,0,,10000003,26204157,--format=csv -n 2 -s 43 --use-p2p | |
30 | 2,25566725,594575,43,1,0,-1,0,0,,10000004,20453371,--format=csv -n 2 -s 43 | |
31 | 2,33459712,760448,44,2,0,-1,0,0,,10000006,26767753,--format=csv -n 2 -s 44 --use-p2p | |
32 | 2,26056624,592196,44,2,0,-1,0,0,,10000002,20845295,--format=csv -n 2 -s 44 | |
33 | 2,34714682,754667,46,4,0,-1,0,0,,10000007,27771726,--format=csv -n 2 -s 46 --use-p2p | |
34 | 2,27253114,592459,46,4,0,-1,0,0,,10000011,21802467,--format=csv -n 2 -s 46 | |
35 | 2,37886350,757727,50,8,0,9,9,680,,10000002,30309073,--format=csv -n 2 -s 50 --use-p2p | |
36 | 2,29665550,593311,50,8,0,13,13,325,,10000011,23732413,--format=csv -n 2 -s 50 | |
37 | 2,44028786,759117,58,16,0,9,10,207,,10000006,35223007,--format=csv -n 2 -s 58 --use-p2p | |
38 | 2,34419984,593448,58,16,0,13,13,619,,10000015,27535945,--format=csv -n 2 -s 58 | |
39 | 2,56526676,763874,74,32,0,9,9,211,,10000000,45221340,--format=csv -n 2 -s 74 --use-p2p | |
40 | 2,44018826,594849,74,32,0,13,13,290,,10000011,35215022,--format=csv -n 2 -s 74 | |
41 | 2,80488026,759321,106,64,0,9,9,835,,10000003,64390401,--format=csv -n 2 -s 106 --use-p2p | |
42 | 2,62710554,591609,106,64,0,13,13,608,,10000007,50168408,--format=csv -n 2 -s 106 | |
43 | 2,128596670,756451,170,128,0,9,10,2479,,10000006,102877274,--format=csv -n 2 -s 170 --use-p2p | |
44 | 2,100280960,589888,170,128,0,13,13,609,,10000000,80224768,--format=csv -n 2 -s 170 | |
45 | 2,222942144,748128,298,256,0,9,10,665,,10000008,178353572,--format=csv -n 2 -s 298 --use-p2p | |
46 | 2,174893518,586891,298,256,0,13,13,205,,10000005,139914744,--format=csv -n 2 -s 298 | |
47 | 2,413247436,745934,554,512,0,9,10,3599,,10000011,330597585,--format=csv -n 2 -s 554 --use-p2p | |
48 | 2,322896130,582845,554,512,0,13,13,3022,,10000008,258316697,--format=csv -n 2 -s 554 | |
49 | 2,754548912,707832,1066,1024,0,10,10,2914,,10000010,603638525,--format=csv -n 2 -s 1066 --use-p2p | |
50 | 2,603938036,566546,1066,1024,0,13,14,1565,,10000013,483149800,--format=csv -n 2 -s 1066 | |
51 | 2,1072513500,715009,1500,1458,0,10,10,2476,,10000011,858009856,--format=csv -n 2 -s 1500 --use-p2p | |
52 | 2,837000000,558000,1500,1458,0,14,14,610,,10000008,669599464,--format=csv -n 2 -s 1500 | |
53 | 3,26998440,642820,42,0,0,-1,0,0,,10000009,21598732,--format=csv -n 3 -s 42 --use-p2p | |
54 | 3,19445160,462980,42,0,0,-1,0,0,,10000001,15556126,--format=csv -n 3 -s 42 | |
55 | 3,27304828,634996,43,1,0,-1,0,0,,10000004,21843853,--format=csv -n 3 -s 43 --use-p2p | |
56 | 3,19648205,456935,43,1,0,-1,0,0,,10000008,15718551,--format=csv -n 3 -s 43 | |
57 | 3,27947876,635179,44,2,0,-1,0,0,,10000011,22358276,--format=csv -n 3 -s 44 --use-p2p | |
58 | 3,19805412,450123,44,2,0,-1,0,0,,10000001,15844328,--format=csv -n 3 -s 44 | |
59 | 3,29036120,631220,46,4,0,-1,0,0,,10000011,23228870,--format=csv -n 3 -s 46 --use-p2p | |
60 | 3,20852628,453318,46,4,0,-1,0,0,,10000001,16682100,--format=csv -n 3 -s 46 | |
61 | 3,31800550,636011,50,8,0,12,12,318,,10000000,25440440,--format=csv -n 3 -s 50 --use-p2p | |
62 | 3,22827550,456551,50,8,0,18,18,409,,10000015,18262012,--format=csv -n 3 -s 50 | |
63 | 3,36802392,634524,58,16,0,12,12,6536,,10000007,29441892,--format=csv -n 3 -s 58 --use-p2p | |
64 | 3,26451190,456055,58,16,0,18,18,6325,,10000013,21160924,--format=csv -n 3 -s 58 | |
65 | 3,46947820,634430,74,32,0,12,12,480,,10000007,37558229,--format=csv -n 3 -s 74 --use-p2p | |
66 | 3,33574318,453707,74,32,0,18,18,3024,,10000006,26859438,--format=csv -n 3 -s 74 | |
67 | 3,67244598,634383,106,64,0,12,12,3022,,10000012,53795613,--format=csv -n 3 -s 106 --use-p2p | |
68 | 3,48324022,455887,106,64,0,18,18,569,,10000006,38659194,--format=csv -n 3 -s 106 | |
69 | 3,107662700,633310,170,128,0,12,12,262,,10000014,86130039,--format=csv -n 3 -s 170 --use-p2p | |
70 | 3,77066950,453335,170,128,0,18,18,619,,10000014,61653473,--format=csv -n 3 -s 170 | |
71 | 3,175495478,588911,298,256,0,12,12,2506,,10000007,140396284,--format=csv -n 3 -s 298 --use-p2p | |
72 | 3,134931122,452789,298,256,0,18,18,605,,10000011,107944778,--format=csv -n 3 -s 298 | |
73 | 3,343163666,619429,554,512,0,12,12,303,,10000006,274530768,--format=csv -n 3 -s 554 --use-p2p | |
74 | 3,249327700,450050,554,512,0,18,18,3026,,10000013,199461900,--format=csv -n 3 -s 554 | |
75 | 3,645981076,605986,1066,1024,0,12,13,302,,10000001,516784809,--format=csv -n 3 -s 1066 --use-p2p | |
76 | 3,460952258,432413,1066,1024,0,18,19,222,,10000011,368761400,--format=csv -n 3 -s 1066 | |
77 | 3,892099500,594733,1500,1458,0,13,13,596,,10000005,713679243,--format=csv -n 3 -s 1500 --use-p2p | |
78 | 3,653416500,435611,1500,1458,0,18,19,217,,10000002,522733095,--format=csv -n 3 -s 1500 | |
79 | 4,23705682,564421,42,0,0,-1,0,0,,10000013,18964520,--format=csv -n 4 -s 42 --use-p2p | |
80 | 4,15876294,378007,42,0,0,-1,0,0,,10000012,12701019,--format=csv -n 4 -s 42 | |
81 | 4,23482214,546098,43,1,0,-1,0,0,,10000011,18785750,--format=csv -n 4 -s 43 --use-p2p | |
82 | 4,16089009,374163,43,1,0,-1,0,0,,10000012,12871191,--format=csv -n 4 -s 43 | |
83 | 4,24475396,556259,44,2,0,-1,0,0,,10000010,19580297,--format=csv -n 4 -s 44 --use-p2p | |
84 | 4,16384016,372364,44,2,0,-1,0,0,,10000006,13107204,--format=csv -n 4 -s 44 | |
85 | 4,25477376,553856,46,4,0,-1,0,0,,10000009,20381882,--format=csv -n 4 -s 46 --use-p2p | |
86 | 4,17101604,371774,46,4,0,-1,0,0,,10000022,13681253,--format=csv -n 4 -s 46 | |
87 | 4,26366100,527322,50,8,0,14,14,2328,,10000010,21092858,--format=csv -n 4 -s 50 --use-p2p | |
88 | 4,18684800,373696,50,8,0,22,23,266,,10000005,14947832,--format=csv -n 4 -s 50 | |
89 | 4,32330244,557418,58,16,0,14,14,3020,,10000003,25864187,--format=csv -n 4 -s 58 --use-p2p | |
90 | 4,21619152,372744,58,16,0,22,23,621,,10000020,17295287,--format=csv -n 4 -s 58 | |
91 | 4,40828464,551736,74,32,0,14,14,1992,,10000014,32662725,--format=csv -n 4 -s 74 --use-p2p | |
92 | 4,27643662,373563,74,32,0,22,23,619,,10000017,22114892,--format=csv -n 4 -s 74 | |
93 | 4,59176514,558269,106,64,0,14,14,3022,,10000003,47341196,--format=csv -n 4 -s 106 --use-p2p | |
94 | 4,39427442,371957,106,64,0,22,23,2133,,10000019,31541893,--format=csv -n 4 -s 106 | |
95 | 4,94033630,553139,170,128,0,14,14,2428,,10000010,75226828,--format=csv -n 4 -s 170 --use-p2p | |
96 | 4,63178290,371637,170,128,0,22,23,686,,10000018,50542541,--format=csv -n 4 -s 170 | |
97 | 4,164163134,550883,298,256,0,14,14,1962,,10000015,131330310,--format=csv -n 4 -s 298 --use-p2p | |
98 | 4,109951570,368965,298,256,0,22,23,3002,,10000002,87961238,--format=csv -n 4 -s 298 | |
99 | 4,300400960,542240,554,512,0,14,14,2925,,10000017,240320359,--format=csv -n 4 -s 554 --use-p2p | |
100 | 4,204265340,368710,554,512,0,23,23,3023,,10000002,163412239,--format=csv -n 4 -s 554 | |
101 | 4,570597820,535270,1066,1024,0,14,15,6391,,10000011,456477753,--format=csv -n 4 -s 1066 --use-p2p | |
102 | 4,383543602,359797,1066,1024,0,23,24,2667,,10000023,306834175,--format=csv -n 4 -s 1066 | |
103 | 4,775998000,517332,1500,1458,0,15,15,3719,,10000009,620797841,--format=csv -n 4 -s 1500 --use-p2p | |
104 | 4,536488500,357659,1500,1458,0,23,24,2659,,10000017,429190070,--format=csv -n 4 -s 1500 | |
105 | 6,19315632,459896,42,0,0,-1,0,0,,10000000,15452505,--format=csv -n 6 -s 42 --use-p2p | |
106 | 6,11193042,266501,42,0,0,-1,0,0,,10000006,8954428,--format=csv -n 6 -s 42 | |
107 | 6,18623257,433099,43,1,0,-1,0,0,,10000014,14898584,--format=csv -n 6 -s 43 --use-p2p | |
108 | 6,11817819,274833,43,1,0,-1,0,0,,10000007,9454248,--format=csv -n 6 -s 43 | |
109 | 6,19882412,451873,44,2,0,-1,0,0,,10000010,15905913,--format=csv -n 6 -s 44 --use-p2p | |
110 | 6,12089792,274768,44,2,0,-1,0,0,,10000031,9671803,--format=csv -n 6 -s 44 | |
111 | 6,20776130,451655,46,4,0,-1,0,0,,10000013,16620882,--format=csv -n 6 -s 46 --use-p2p | |
112 | 6,12628334,274529,46,4,0,-1,0,0,,10000026,10102640,--format=csv -n 6 -s 46 | |
113 | 6,22367350,447347,50,8,0,18,19,2467,,10000013,17893856,--format=csv -n 6 -s 50 --use-p2p | |
114 | 6,13735350,274707,50,8,0,32,32,673,,10000034,10988242,--format=csv -n 6 -s 50 | |
115 | 6,26372600,454700,58,16,0,18,18,597,,10000001,21098077,--format=csv -n 6 -s 58 --use-p2p | |
116 | 6,15723220,271090,58,16,0,32,32,623,,10000021,12578549,--format=csv -n 6 -s 58 | |
117 | 6,33213050,448825,74,32,0,18,18,2423,,10000001,26570437,--format=csv -n 6 -s 74 --use-p2p | |
118 | 6,20231304,273396,74,32,0,32,33,628,,10000022,16185007,--format=csv -n 6 -s 74 | |
119 | 6,47678906,449801,106,64,0,18,18,588,,10000010,38143086,--format=csv -n 6 -s 106 --use-p2p | |
120 | 6,29065094,274199,106,64,0,32,32,624,,10000029,23252007,--format=csv -n 6 -s 106 | |
121 | 6,76695160,451148,170,128,0,18,18,346,,10000009,61356072,--format=csv -n 6 -s 170 --use-p2p | |
122 | 6,46496870,273511,170,128,0,32,32,2425,,10000003,37197484,--format=csv -n 6 -s 170 | |
123 | 6,134036526,449787,298,256,0,18,18,810,,10000020,107229006,--format=csv -n 6 -s 298 --use-p2p | |
124 | 6,81152254,272323,298,256,0,32,33,623,,10000000,64921803,--format=csv -n 6 -s 298 | |
125 | 6,247951564,447566,554,512,0,18,19,2903,,10000012,198361013,--format=csv -n 6 -s 554 --use-p2p | |
126 | 6,145439958,262527,554,512,0,32,33,956,,10000006,116351896,--format=csv -n 6 -s 554 | |
127 | 6,466302512,437432,1066,1024,0,18,19,3024,,10000001,373041972,--format=csv -n 6 -s 1066 --use-p2p | |
128 | 6,271252228,254458,1066,1024,0,32,33,2727,,10000004,217001695,--format=csv -n 6 -s 1066 | |
129 | 6,644083500,429389,1500,1458,0,19,19,2389,,10000005,515266542,--format=csv -n 6 -s 1500 --use-p2p | |
130 | 6,400338000,266892,1500,1458,0,33,33,625,,10000024,320269631,--format=csv -n 6 -s 1500 | |
131 | 8,16154670,384635,42,0,0,-1,0,0,,10000001,12923734,--format=csv -n 8 -s 42 --use-p2p | |
132 | 8,9139620,217610,42,0,0,-1,0,0,,10000021,7311680,--format=csv -n 8 -s 42 | |
133 | 8,15563635,361945,43,1,0,-1,0,0,,10000003,12450904,--format=csv -n 8 -s 43 --use-p2p | |
134 | 8,9342567,217269,43,1,0,-1,0,0,,10000021,7474037,--format=csv -n 8 -s 43 | |
135 | 8,16707108,379707,44,2,0,-1,0,0,,10000005,13365679,--format=csv -n 8 -s 44 --use-p2p | |
136 | 8,9534712,216698,44,2,0,-1,0,0,,10000000,7627769,--format=csv -n 8 -s 44 | |
137 | 8,17458288,379528,46,4,0,-1,0,0,,10000000,13966630,--format=csv -n 8 -s 46 --use-p2p | |
138 | 8,9972294,216789,46,4,0,-1,0,0,,10000017,7977821,--format=csv -n 8 -s 46 | |
139 | 8,19030400,380608,50,8,0,22,22,653,,10000018,15224292,--format=csv -n 8 -s 50 --use-p2p | |
140 | 8,10814750,216295,50,8,0,41,42,3095,,10000015,8651787,--format=csv -n 8 -s 50 | |
141 | 8,22049280,380160,58,16,0,22,22,3021,,10000012,17639402,--format=csv -n 8 -s 58 --use-p2p | |
142 | 8,12556072,216484,58,16,0,41,42,234,,10000030,10044827,--format=csv -n 8 -s 58 | |
143 | 8,28167360,380640,74,32,0,22,22,850,,10000020,22533842,--format=csv -n 8 -s 74 --use-p2p | |
144 | 8,16076426,217249,74,32,0,41,42,635,,10000006,12861133,--format=csv -n 8 -s 74 | |
145 | 8,40206330,379305,106,64,0,22,23,7066,,10000018,32165006,--format=csv -n 8 -s 106 --use-p2p | |
146 | 8,22943382,216447,106,64,0,41,42,620,,10000035,18354641,--format=csv -n 8 -s 106 | |
147 | 8,64253370,377961,170,128,0,22,23,1730,,10000019,51402598,--format=csv -n 8 -s 170 --use-p2p | |
148 | 8,36731730,216069,170,128,0,41,42,500,,10000021,29385322,--format=csv -n 8 -s 170 | |
149 | 8,112488742,377479,298,256,0,22,23,601,,10000021,89990804,--format=csv -n 8 -s 298 --use-p2p | |
150 | 8,64457102,216299,298,256,0,41,42,491,,10000041,51565470,--format=csv -n 8 -s 298 | |
151 | 8,208162730,375745,554,512,0,22,23,362,,10000016,166529917,--format=csv -n 8 -s 554 --use-p2p | |
152 | 8,119535472,215768,554,512,0,41,42,988,,10000033,95628062,--format=csv -n 8 -s 554 | |
153 | 8,393959488,369568,1066,1024,0,23,23,6760,,10000013,315167180,--format=csv -n 8 -s 1066 --use-p2p | |
154 | 8,226235048,212228,1066,1024,0,42,43,1049,,10000017,180987730,--format=csv -n 8 -s 1066 | |
155 | 8,547935000,365290,1500,1458,0,23,23,2717,,10000007,438347693,--format=csv -n 8 -s 1500 --use-p2p | |
156 | 8,317413500,211609,1500,1458,0,42,43,1088,,10000004,253930698,--format=csv -n 8 -s 1500 | |
157 | 12,12142116,289098,42,0,0,-1,0,0,,10000007,9713686,--format=csv -n 12 -s 42 --use-p2p | |
158 | 12,6481104,154312,42,0,0,-1,0,0,,10000011,5184877,--format=csv -n 12 -s 42 | |
159 | 12,12338764,286948,43,1,0,-1,0,0,,10000018,9870993,--format=csv -n 12 -s 43 --use-p2p | |
160 | 12,6580247,153029,43,1,0,-1,0,0,,10000019,5264187,--format=csv -n 12 -s 43 | |
161 | 12,12567984,285636,44,2,0,-1,0,0,,10000019,10054368,--format=csv -n 12 -s 44 --use-p2p | |
162 | 12,6736620,153105,44,2,0,-1,0,0,,10000043,5389272,--format=csv -n 12 -s 44 | |
163 | 12,13163498,286163,46,4,0,-1,0,0,,10000005,10530793,--format=csv -n 12 -s 46 --use-p2p | |
164 | 12,7046372,153182,46,4,0,-1,0,0,,10000043,5637073,--format=csv -n 12 -s 46 | |
165 | 12,13963400,279268,50,8,0,30,31,1661,,10000013,11170705,--format=csv -n 12 -s 50 --use-p2p | |
166 | 12,7619550,152391,50,8,0,59,61,2668,,10000044,6095613,--format=csv -n 12 -s 50 | |
167 | 12,16665720,287340,58,16,0,30,31,621,,10000012,13332560,--format=csv -n 12 -s 58 --use-p2p | |
168 | 12,8873188,152986,58,16,0,59,61,1263,,10000004,7098547,--format=csv -n 12 -s 58 | |
169 | 12,21206550,286575,74,32,0,30,31,7075,,10000022,16965202,--format=csv -n 12 -s 74 --use-p2p | |
170 | 12,11318818,152957,74,32,0,59,61,618,,10000046,9055012,--format=csv -n 12 -s 74 | |
171 | 12,30329886,286131,106,64,0,30,31,6473,,10000027,24263843,--format=csv -n 12 -s 106 --use-p2p | |
172 | 12,16024762,151177,106,64,0,60,61,2854,,10000046,12819750,--format=csv -n 12 -s 106 | |
173 | 12,48653150,286195,170,128,0,30,31,1298,,10000022,38922434,--format=csv -n 12 -s 170 --use-p2p | |
174 | 12,25947100,152630,170,128,0,60,61,1705,,10000020,20757638,--format=csv -n 12 -s 170 | |
175 | 12,84861162,284769,298,256,0,30,31,625,,10000020,67888793,--format=csv -n 12 -s 298 --use-p2p | |
176 | 12,45321032,152084,298,256,0,59,61,860,,10000034,36256702,--format=csv -n 12 -s 298 | |
177 | 12,157378658,284077,554,512,0,31,31,1792,,10000027,125902586,--format=csv -n 12 -s 554 --use-p2p | |
178 | 12,83980860,151590,554,512,0,60,61,1616,,10000006,67184647,--format=csv -n 12 -s 554 | |
179 | 12,286565318,268823,1066,1024,0,31,32,1986,,10000018,229251841,--format=csv -n 12 -s 1066 --use-p2p | |
180 | 12,159903198,150003,1066,1024,0,60,62,619,,10000028,127922200,--format=csv -n 12 -s 1066 | |
181 | 12,418357500,278905,1500,1458,0,31,32,635,,10000020,334685330,--format=csv -n 12 -s 1500 --use-p2p | |
182 | 12,223633500,149089,1500,1458,0,61,62,618,,10000044,178906012,--format=csv -n 12 -s 1500 | |
183 | 16,9582594,228157,42,0,0,-1,0,0,,10000035,7666048,--format=csv -n 16 -s 42 --use-p2p | |
184 | 16,4931850,117425,42,0,0,-1,0,0,,10000065,3945454,--format=csv -n 16 -s 42 | |
185 | 16,9784521,227547,43,1,0,-1,0,0,,10000030,7827593,--format=csv -n 16 -s 43 --use-p2p | |
186 | 16,5027560,116920,43,1,0,-1,0,0,,10000022,4022039,--format=csv -n 16 -s 43 | |
187 | 16,10029008,227932,44,2,0,-1,0,0,,10000013,8023195,--format=csv -n 16 -s 44 --use-p2p | |
188 | 16,5088688,115652,44,2,0,-1,0,0,,10000008,4070947,--format=csv -n 16 -s 44 | |
189 | 16,10544764,229234,46,4,0,-1,0,0,,10000016,8435797,--format=csv -n 16 -s 46 --use-p2p | |
190 | 16,5343590,116165,46,4,0,-1,0,0,,10000069,4274842,--format=csv -n 16 -s 46 | |
191 | 16,11156150,223123,50,8,0,39,40,2095,,10000009,8924911,--format=csv -n 16 -s 50 --use-p2p | |
192 | 16,5805850,116117,50,8,0,79,81,2000,,10000019,4644671,--format=csv -n 16 -s 50 | |
193 | 16,13174468,227146,58,16,0,39,40,3043,,10000006,10539568,--format=csv -n 16 -s 58 --use-p2p | |
194 | 16,6746618,116321,58,16,0,78,80,2045,,10000027,5397279,--format=csv -n 16 -s 58 | |
195 | 16,16855572,227778,74,32,0,39,40,299,,10000001,13484456,--format=csv -n 16 -s 74 --use-p2p | |
196 | 16,8541228,115422,74,32,0,78,81,1311,,10000008,6832976,--format=csv -n 16 -s 74 | |
197 | 16,24361980,229830,106,64,0,38,39,362,,10000031,19489523,--format=csv -n 16 -s 106 --use-p2p | |
198 | 16,12362568,116628,106,64,0,78,80,2020,,10000008,9890046,--format=csv -n 16 -s 106 | |
199 | 16,38781250,228125,170,128,0,39,40,2131,,10000039,31024879,--format=csv -n 16 -s 170 --use-p2p | |
200 | 16,19882180,116954,170,128,0,78,80,1062,,10000072,15905629,--format=csv -n 16 -s 170 | |
201 | 16,68188956,228822,298,256,0,39,39,646,,10000012,54551099,--format=csv -n 16 -s 298 --use-p2p | |
202 | 16,34508996,115802,298,256,0,78,81,2560,,10000072,27606998,--format=csv -n 16 -s 298 | |
203 | 16,119657352,215988,554,512,0,39,40,3023,,10000036,95725536,--format=csv -n 16 -s 554 --use-p2p | |
204 | 16,63005312,113728,554,512,0,78,80,2676,,10000048,50404007,--format=csv -n 16 -s 554 | |
205 | 16,233278110,218835,1066,1024,0,39,40,5541,,10000040,186621741,--format=csv -n 16 -s 1066 --use-p2p | |
206 | 16,122727514,115129,1066,1024,0,79,81,2908,,10000045,98181569,--format=csv -n 16 -s 1066 | |
207 | 16,327915000,218610,1500,1458,0,39,40,4895,,10000025,262331344,--format=csv -n 16 -s 1500 --use-p2p | |
208 | 16,171390000,114260,1500,1458,0,79,81,635,,10000047,137111355,--format=csv -n 16 -s 1500 | |
209 | 32,5328162,126861,42,0,0,-1,0,0,,10000043,4262511,--format=csv -n 32 -s 42 --use-p2p | |
210 | 32,2586570,61585,42,0,0,-1,0,0,,10000064,2069242,--format=csv -n 32 -s 42 | |
211 | 32,5343911,124277,43,1,0,-1,0,0,,10000055,4275105,--format=csv -n 32 -s 43 --use-p2p | |
212 | 32,2678513,62291,43,1,0,-1,0,0,,10000110,2142786,--format=csv -n 32 -s 43 | |
213 | 32,5521736,125494,44,2,0,-1,0,0,,10000007,4417385,--format=csv -n 32 -s 44 --use-p2p | |
214 | 32,2728484,62011,44,2,0,-1,0,0,,10000073,2182771,--format=csv -n 32 -s 44 | |
215 | 32,5730588,124578,46,4,0,-1,0,0,,10000012,4584464,--format=csv -n 32 -s 46 --use-p2p | |
216 | 32,2860004,62174,46,4,0,-1,0,0,,10000127,2287974,--format=csv -n 32 -s 46 | |
217 | 32,6203950,124079,50,8,0,72,74,779,,10000018,4963151,--format=csv -n 32 -s 50 --use-p2p | |
218 | 32,3092200,61844,50,8,0,153,157,2353,,10000152,2473722,--format=csv -n 32 -s 50 | |
219 | 32,7210618,124321,58,16,0,72,73,2468,,10000056,5768462,--format=csv -n 32 -s 58 --use-p2p | |
220 | 32,3585618,61821,58,16,0,153,157,3066,,10000134,2868455,--format=csv -n 32 -s 58 | |
221 | 32,9131156,123394,74,32,0,72,74,731,,10000004,7304921,--format=csv -n 32 -s 74 --use-p2p | |
222 | 32,4598138,62137,74,32,0,153,157,2098,,10000122,3678465,--format=csv -n 32 -s 74 | |
223 | 32,13017542,122807,106,64,0,72,74,1982,,10000024,10414008,--format=csv -n 32 -s 106 --use-p2p | |
224 | 32,6599136,62256,106,64,0,153,156,715,,10000139,5279235,--format=csv -n 32 -s 106 | |
225 | 32,21003330,123549,170,128,0,72,73,5149,,10000052,16802576,--format=csv -n 32 -s 170 --use-p2p | |
226 | 32,10559380,62114,170,128,0,153,157,1893,,10000060,8447453,--format=csv -n 32 -s 170 | |
227 | 32,36544038,122631,298,256,0,72,74,1727,,10000061,29235052,--format=csv -n 32 -s 298 --use-p2p | |
228 | 32,18435472,61864,298,256,0,154,157,945,,10000044,14748312,--format=csv -n 32 -s 298 | |
229 | 32,66123224,119356,554,512,0,72,74,2657,,10000053,52898298,--format=csv -n 32 -s 554 --use-p2p | |
230 | 32,33541376,60544,554,512,0,154,157,3166,,10000000,26833100,--format=csv -n 32 -s 554 | |
231 | 32,130040274,121989,1066,1024,0,73,74,2579,,10000103,104031147,--format=csv -n 32 -s 1066 --use-p2p | |
232 | 32,65690118,61623,1066,1024,0,154,158,1183,,10000025,52551963,--format=csv -n 32 -s 1066 | |
233 | 32,181837500,121225,1500,1458,0,73,75,6909,,10000054,145469214,--format=csv -n 32 -s 1500 --use-p2p | |
234 | 32,92371500,61581,1500,1458,0,154,158,2651,,10000096,73896490,--format=csv -n 32 -s 1500 | |
235 | 64,2659860,63330,42,0,0,-1,0,0,,10000020,2127883,--format=csv -n 64 -s 42 --use-p2p | |
236 | 64,1298850,30925,42,0,0,-1,0,0,,10000297,1039049,--format=csv -n 64 -s 42 | |
237 | 64,2617969,60883,43,1,0,-1,0,0,,10000016,2094371,--format=csv -n 64 -s 43 --use-p2p | |
238 | 64,1284152,29864,43,1,0,-1,0,0,,10000207,1027300,--format=csv -n 64 -s 43 | |
239 | 64,2661032,60478,44,2,0,-1,0,0,,10000022,2128820,--format=csv -n 64 -s 44 --use-p2p | |
240 | 64,1353220,30755,44,2,0,-1,0,0,,10000271,1082546,--format=csv -n 64 -s 44 | |
241 | 64,2779550,60425,46,4,0,-1,0,0,,10000061,2223626,--format=csv -n 64 -s 46 --use-p2p | |
242 | 64,1412476,30706,46,4,0,-1,0,0,,10000020,1129978,--format=csv -n 64 -s 46 | |
243 | 64,2966000,59320,50,8,0,145,150,3123,,10000132,2372768,--format=csv -n 64 -s 50 --use-p2p | |
244 | 64,1497600,29952,50,8,0,313,322,3161,,10000064,1198072,--format=csv -n 64 -s 50 | |
245 | 64,3410168,58796,58,16,0,146,150,2262,,10000100,2728107,--format=csv -n 64 -s 58 --use-p2p | |
246 | 64,1786632,30804,58,16,0,312,320,1095,,10000072,1429295,--format=csv -n 64 -s 58 | |
247 | 64,4303544,58156,74,32,0,145,151,1590,,10000149,3442783,--format=csv -n 64 -s 74 --use-p2p | |
248 | 64,2254336,30464,74,32,0,315,323,1907,,10000301,1803414,--format=csv -n 64 -s 74 | |
249 | 64,5980202,56417,106,64,0,147,152,3112,,10000063,4784131,--format=csv -n 64 -s 106 --use-p2p | |
250 | 64,3250490,30665,106,64,0,313,321,1081,,10000163,2600349,--format=csv -n 64 -s 106 | |
251 | 64,9245960,54388,170,128,0,146,151,2991,,10000050,7396731,--format=csv -n 64 -s 170 --use-p2p | |
252 | 64,5216450,30685,170,128,0,313,321,2447,,10000028,4173148,--format=csv -n 64 -s 170 | |
253 | 64,16653134,55883,298,256,0,148,152,1069,,10000129,13322335,--format=csv -n 64 -s 298 --use-p2p | |
254 | 64,9130720,30640,298,256,0,314,321,2367,,10000222,7304413,--format=csv -n 64 -s 298 | |
255 | 64,30402966,54879,554,512,0,148,153,3068,,10000146,24322017,--format=csv -n 64 -s 554 --use-p2p | |
256 | 64,16951292,30598,554,512,0,314,322,2139,,10000197,13560766,--format=csv -n 64 -s 554 | |
257 | 64,56105712,52632,1066,1024,0,148,154,2721,,10000069,44884259,--format=csv -n 64 -s 1066 --use-p2p | |
258 | 64,32371222,30367,1066,1024,0,315,324,2221,,10000312,25896169,--format=csv -n 64 -s 1066 | |
259 | 64,74034000,49356,1500,1458,0,147,153,7388,,10000104,59226584,--format=csv -n 64 -s 1500 --use-p2p | |
260 | 64,45405000,30270,1500,1458,0,317,326,1971,,10000323,36322826,--format=csv -n 64 -s 1500 |
0 | # ns3user-ns3kernel | |
1 | # pktsz nodes usec mem | |
2 | 1400.0 1.0 11.6054 308000.0 exp1 | |
3 | 1000.0 1.0 11.1844 308000.0 exp1 | |
4 | 600.0 1.0 10.3422 308000.0 exp1 | |
5 | 400.0 1.0 10.2632 308000.0 exp1 | |
6 | 100.0 1.0 9.82896 308000.0 exp1 | |
7 | 80.0 1.0 9.85264 308000.0 exp1 | |
8 | 30.0 1.0 9.63947 308000.0 exp1 | |
9 | 10.0 1.0 9.63816 308000.0 exp1 | |
10 | 1400.0 2.0 15.4739 344000.0 exp1 | |
11 | 1000.0 2.0 14.6055 344000.0 exp1 | |
12 | 600.0 2.0 14.0527 344000.0 exp1 | |
13 | 400.0 2.0 13.8948 344000.0 exp1 | |
14 | 100.0 2.0 13.3948 344000.0 exp1 | |
15 | 80.0 2.0 13.4211 344000.0 exp1 | |
16 | 30.0 2.0 16.2884 344000.0 exp1 | |
17 | 10.0 2.0 27.215 344000.0 exp1 | |
18 | 1400.0 3.0 22.4744 356000.0 exp1 | |
19 | 1000.0 3.0 21.8427 356000.0 exp1 | |
20 | 600.0 3.0 20.8424 356000.0 exp1 | |
21 | 400.0 3.0 21.0529 356000.0 exp1 | |
22 | 100.0 3.0 20.4737 356000.0 exp1 | |
23 | 80.0 3.0 20.3264 356000.0 exp1 | |
24 | 30.0 3.0 23.3369 356000.0 exp1 | |
25 | 10.0 3.0 34.38 356000.0 exp1 | |
26 | 1400.0 4.0 29.2904 364000.0 exp1 | |
27 | 1000.0 4.0 28.2902 364000.0 exp1 | |
28 | 600.0 4.0 28.1056 364000.0 exp1 | |
29 | 400.0 4.0 27.6845 364000.0 exp1 | |
30 | 100.0 4.0 27.3948 364000.0 exp1 | |
31 | 80.0 4.0 27.1053 364000.0 exp1 | |
32 | 30.0 4.0 30.0064 364000.0 exp1 | |
33 | 10.0 4.0 40.6451 364000.0 exp1 | |
34 | 1400.0 10.0 69.0849 424000.0 exp1 | |
35 | 1000.0 10.0 69.7414 424000.0 exp1 | |
36 | 600.0 10.0 68.6083 424000.0 exp1 | |
37 | 400.0 10.0 68.5285 424000.0 exp1 | |
38 | 100.0 10.0 66.027 424000.0 exp1 | |
39 | 80.0 10.0 66.8427 424000.0 exp1 | |
40 | 30.0 10.0 69.9604 424000.0 exp1 | |
41 | 10.0 10.0 80.4004 424000.0 exp1 | |
42 | 1400.0 20.0 136.711 528000.0 exp1 | |
43 | 1000.0 20.0 137.915 528000.0 exp1 | |
44 | 600.0 20.0 138.17 528000.0 exp1 | |
45 | 400.0 20.0 146.536 528000.0 exp1 | |
46 | 100.0 20.0 134.371 528000.0 exp1 | |
47 | 80.0 20.0 136.676 528000.0 exp1 | |
48 | 30.0 20.0 135.614 528000.0 exp1 | |
49 | 10.0 20.0 146.406 528000.0 exp1 | |
50 | ||
51 | ||
52 | # posixuser-ns3kernel | |
53 | # pktsz nodes usec mem | |
54 | 1400.0 1.0 23.9935 284000.0 exp2 | |
55 | 1000.0 1.0 22.275 284000.0 exp2 | |
56 | 600.0 1.0 21.1502 284000.0 exp2 | |
57 | 400.0 1.0 20.3162 284000.0 exp2 | |
58 | 100.0 1.0 19.3629 284000.0 exp2 | |
59 | 80.0 1.0 17.2199 284000.0 exp2 | |
60 | 30.0 1.0 11.6907 284000.0 exp2 | |
61 | 10.0 1.0 9.41529 284000.0 exp2 | |
62 | 1400.0 2.0 29.8507 320000.0 exp2 | |
63 | 1000.0 2.0 28.3504 320000.0 exp2 | |
64 | 600.0 2.0 26.4979 320000.0 exp2 | |
65 | 400.0 2.0 25.6115 320000.0 exp2 | |
66 | 100.0 2.0 24.1463 320000.0 exp2 | |
67 | 80.0 2.0 23.0901 320000.0 exp2 | |
68 | 30.0 2.0 23.7398 320000.0 exp2 | |
69 | 10.0 2.0 34.3538 320000.0 exp2 | |
70 | 1400.0 3.0 41.754 332000.0 exp2 | |
71 | 1000.0 3.0 40.6361 332000.0 exp2 | |
72 | 600.0 3.0 37.2756 332000.0 exp2 | |
73 | 400.0 3.0 35.2836 332000.0 exp2 | |
74 | 100.0 3.0 34.4021 332000.0 exp2 | |
75 | 80.0 3.0 32.5921 332000.0 exp2 | |
76 | 30.0 3.0 32.4704 332000.0 exp2 | |
77 | 10.0 3.0 42.9911 332000.0 exp2 | |
78 | 1400.0 4.0 50.8228 340000.0 exp2 | |
79 | 1000.0 4.0 48.7364 340000.0 exp2 | |
80 | 600.0 4.0 49.6738 340000.0 exp2 | |
81 | 400.0 4.0 41.5514 340000.0 exp2 | |
82 | 100.0 4.0 41.3879 340000.0 exp2 | |
83 | 80.0 4.0 40.0402 340000.0 exp2 | |
84 | 30.0 4.0 39.5275 340000.0 exp2 | |
85 | 10.0 4.0 50.0416 340000.0 exp2 | |
86 | 1400.0 10.0 105.808 400000.0 exp2 | |
87 | 1000.0 10.0 100.717 400000.0 exp2 | |
88 | 600.0 10.0 92.6241 400000.0 exp2 | |
89 | 400.0 10.0 88.9403 400000.0 exp2 | |
90 | 100.0 10.0 84.3573 400000.0 exp2 | |
91 | 80.0 10.0 83.9941 400000.0 exp2 | |
92 | 30.0 10.0 82.3179 400000.0 exp2 | |
93 | 10.0 10.0 90.7838 400000.0 exp2 | |
94 | 1400.0 20.0 195.386 500000.0 exp2 | |
95 | 1000.0 20.0 187.948 500000.0 exp2 | |
96 | 600.0 20.0 174.074 500000.0 exp2 | |
97 | 400.0 20.0 161.676 500000.0 exp2 | |
98 | 100.0 20.0 158.474 500000.0 exp2 | |
99 | 80.0 20.0 153.947 500000.0 exp2 | |
100 | 30.0 20.0 149.705 500000.0 exp2 | |
101 | 10.0 20.0 158.209 500000.0 exp2 | |
102 | ||
103 | ||
104 | # posixuser-linuxkernel | |
105 | 1400.0 1.0 18.8925 1804000.0 exp3-nopic | |
106 | 1000.0 1.0 17.415 1804000.0 exp3-nopic | |
107 | 600.0 1.0 15.4777 1804000.0 exp3-nopic | |
108 | 400.0 1.0 14.967 1804000.0 exp3-nopic | |
109 | 100.0 1.0 13.9716 1804000.0 exp3-nopic | |
110 | 80.0 1.0 11.4151 1804000.0 exp3-nopic | |
111 | 30.0 1.0 5.42379 1804000.0 exp3-nopic | |
112 | 10.0 1.0 3.0551 1804000.0 exp3-nopic | |
113 | 1400.0 2.0 35.1408 2312000.0 exp3-nopic | |
114 | 1000.0 2.0 33.6159 2312000.0 exp3-nopic | |
115 | 600.0 2.0 30.5503 2312000.0 exp3-nopic | |
116 | 400.0 2.0 29.2868 2312000.0 exp3-nopic | |
117 | 100.0 2.0 27.6743 2312000.0 exp3-nopic | |
118 | 80.0 2.0 25.5777 2312000.0 exp3-nopic | |
119 | 30.0 2.0 25.6222 2312000.0 exp3-nopic | |
120 | 10.0 2.0 34.1143 2312000.0 exp3-nopic | |
121 | 1400.0 3.0 50.8247 3408000.0 exp3-nopic | |
122 | 1000.0 3.0 48.469 3408000.0 exp3-nopic | |
123 | 600.0 3.0 44.0047 3408000.0 exp3-nopic | |
124 | 400.0 3.0 41.6631 3408000.0 exp3-nopic | |
125 | 100.0 3.0 39.9732 3408000.0 exp3-nopic | |
126 | 80.0 3.0 38.92 3408000.0 exp3-nopic | |
127 | 30.0 3.0 38.1046 3408000.0 exp3-nopic | |
128 | 10.0 3.0 46.4725 3408000.0 exp3-nopic | |
129 | 1400.0 4.0 67.4539 4508000.0 exp3-nopic | |
130 | 1000.0 4.0 63.3236 4508000.0 exp3-nopic | |
131 | 600.0 4.0 58.0279 4508000.0 exp3-nopic | |
132 | 400.0 4.0 55.6078 4508000.0 exp3-nopic | |
133 | 100.0 4.0 53.1384 4508000.0 exp3-nopic | |
134 | 80.0 4.0 51.3447 4508000.0 exp3-nopic | |
135 | 30.0 4.0 50.6402 4508000.0 exp3-nopic | |
136 | 10.0 4.0 59.1352 4508000.0 exp3-nopic | |
137 | 1400.0 10.0 160.839 11100000.0 exp3-nopic | |
138 | 1000.0 10.0 162.478 11100000.0 exp3-nopic | |
139 | 600.0 10.0 139.116 11100000.0 exp3-nopic | |
140 | 400.0 10.0 136.227 11100000.0 exp3-nopic | |
141 | 100.0 10.0 132.659 11100000.0 exp3-nopic | |
142 | 80.0 10.0 128.236 11100000.0 exp3-nopic | |
143 | 30.0 10.0 122.553 11100000.0 exp3-nopic | |
144 | 10.0 10.0 133.47 11100000.0 exp3-nopic | |
145 | 1400.0 20.0 311.62 22096000.0 exp3-nopic | |
146 | 1000.0 20.0 301.081 22096000.0 exp3-nopic | |
147 | 600.0 20.0 276.518 22096000.0 exp3-nopic | |
148 | 400.0 20.0 269.517 22096000.0 exp3-nopic | |
149 | 100.0 20.0 259.321 22096000.0 exp3-nopic | |
150 | 80.0 20.0 258.255 22096000.0 exp3-nopic | |
151 | 30.0 20.0 236.266 22096000.0 exp3-nopic | |
152 | 10.0 20.0 257.22 22096000.0 exp3-nopic | |
153 | ||
154 | ||
155 | 1400.0 1.0 20.7818 1108000.0 exp3-pic | |
156 | 1000.0 1.0 17.685 1108000.0 exp3-pic | |
157 | 600.0 1.0 16.4502 1108000.0 exp3-pic | |
158 | 400.0 1.0 15.5613 1108000.0 exp3-pic | |
159 | 100.0 1.0 14.3905 1108000.0 exp3-pic | |
160 | 80.0 1.0 11.9988 1108000.0 exp3-pic | |
161 | 30.0 1.0 5.92644 1108000.0 exp3-pic | |
162 | 10.0 1.0 3.4402 1108000.0 exp3-pic | |
163 | 1400.0 2.0 36.6522 832000.0 exp3-pic | |
164 | 1000.0 2.0 34.561 832000.0 exp3-pic | |
165 | 600.0 2.0 32.5762 832000.0 exp3-pic | |
166 | 400.0 2.0 30.2595 832000.0 exp3-pic | |
167 | 100.0 2.0 29.2824 832000.0 exp3-pic | |
168 | 80.0 2.0 27.0263 832000.0 exp3-pic | |
169 | 30.0 2.0 26.965 832000.0 exp3-pic | |
170 | 10.0 2.0 36.4201 832000.0 exp3-pic | |
171 | 1400.0 3.0 53.6588 1184000.0 exp3-pic | |
172 | 1000.0 3.0 51.5742 1184000.0 exp3-pic | |
173 | 600.0 3.0 47.6515 1184000.0 exp3-pic | |
174 | 400.0 3.0 44.6892 1184000.0 exp3-pic | |
175 | 100.0 3.0 43.6219 1184000.0 exp3-pic | |
176 | 80.0 3.0 41.2227 1184000.0 exp3-pic | |
177 | 30.0 3.0 40.3945 1184000.0 exp3-pic | |
178 | 10.0 3.0 49.6258 1184000.0 exp3-pic | |
179 | 1400.0 4.0 69.3434 1536000.0 exp3-pic | |
180 | 1000.0 4.0 66.294 1536000.0 exp3-pic | |
181 | 600.0 4.0 61.6749 1536000.0 exp3-pic | |
182 | 400.0 4.0 58.526 1536000.0 exp3-pic | |
183 | 100.0 4.0 56.5305 1536000.0 exp3-pic | |
184 | 80.0 4.0 54.8369 1536000.0 exp3-pic | |
185 | 30.0 4.0 54.085 1536000.0 exp3-pic | |
186 | 10.0 4.0 64.7179 1536000.0 exp3-pic | |
187 | 1400.0 10.0 164.997 3668000.0 exp3-pic | |
188 | 1000.0 10.0 157.48 3668000.0 exp3-pic | |
189 | 600.0 10.0 145.926 3668000.0 exp3-pic | |
190 | 400.0 10.0 142.443 3668000.0 exp3-pic | |
191 | 100.0 10.0 137.499 3668000.0 exp3-pic | |
192 | 80.0 10.0 136.347 3668000.0 exp3-pic | |
193 | 30.0 10.0 126.181 3668000.0 exp3-pic | |
194 | 10.0 10.0 139.126 3668000.0 exp3-pic | |
195 | 1400.0 20.0 321.641 7224000.0 exp3-pic | |
196 | 1000.0 20.0 309.865 7224000.0 exp3-pic | |
197 | 600.0 20.0 290.551 7224000.0 exp3-pic | |
198 | 400.0 20.0 282.715 7224000.0 exp3-pic | |
199 | 100.0 20.0 272.982 7224000.0 exp3-pic | |
200 | 80.0 20.0 266.403 7224000.0 exp3-pic | |
201 | 30.0 20.0 238.415 7224000.0 exp3-pic | |
202 | 10.0 20.0 271.268 7224000.0 exp3-pic |
0 | /* vim: ts=4:sw=4:et:ai:sts=4 | |
1 | */ | |
2 | #include <sys/timerfd.h> | |
3 | #include <time.h> | |
4 | #include <sys/time.h> | |
5 | #include <stdbool.h> | |
6 | #include <string.h> | |
7 | #include <stdlib.h> | |
8 | #include <stdio.h> | |
9 | #include <sys/socket.h> | |
10 | #include <stdint.h> | |
11 | #include <netinet/in.h> | |
12 | #include <arpa/inet.h> | |
13 | #include <pthread.h> | |
14 | #include <unistd.h> | |
15 | #include <errno.h> | |
16 | #include <fcntl.h> | |
17 | ||
18 | #define HDR_SIZE (14 + 20 + 8) /* eth + ip + udp headers */ | |
19 | static uint64_t current_time(void); | |
20 | ||
21 | static void fatal(const char *func, const char *detailed) { | |
22 | char *error; | |
23 | if(detailed) | |
24 | fprintf(stderr, "%s\n", detailed); | |
25 | if(func) { | |
26 | error = strerror(errno); | |
27 | fprintf(stderr, "%s: %s (%d)\n", func, error, errno); | |
28 | } | |
29 | exit(1); | |
30 | } | |
31 | static void set_txbuf_size(int fd, int buffer_size) { | |
32 | int msg_size = buffer_size; | |
33 | int status = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char*)&msg_size, | |
34 | sizeof(msg_size)); | |
35 | if(status == -1) | |
36 | fatal("setsockopt", "Unable to set socket buffer size"); | |
37 | } | |
38 | ||
39 | static void run_client(const char *to_ip, unsigned to_port, unsigned pkt_size) { | |
40 | int status, fd, cfd; | |
41 | uint64_t seq; | |
42 | struct sockaddr_in addr, to; | |
43 | void *buffer; | |
44 | ||
45 | if(pkt_size < HDR_SIZE) | |
46 | fatal(NULL, "Cannot send packets that small."); | |
47 | pkt_size -= HDR_SIZE; | |
48 | ||
49 | buffer = malloc(pkt_size); | |
50 | if(! buffer) | |
51 | fatal("malloc", NULL); | |
52 | memset(buffer, 0, pkt_size); | |
53 | ||
54 | fd = socket(AF_INET, SOCK_DGRAM, 0); | |
55 | if(fd == -1) | |
56 | fatal("socket", "Unable to create udp socket"); | |
57 | ||
58 | cfd = socket(AF_INET, SOCK_STREAM, 0); | |
59 | if(cfd == -1) | |
60 | fatal("socket", "Unable to create tcp socket"); | |
61 | ||
62 | #if 0 | |
63 | status = fcntl(fd, F_GETFL, 0); | |
64 | if(status == -1) | |
65 | fatal("fcntl", NULL); | |
66 | ||
67 | status = fcntl(fd, F_SETFL, status | O_NONBLOCK); | |
68 | if(status == -1) | |
69 | fatal("fcntl", NULL); | |
70 | ||
71 | set_txbuf_size(fd, 1<<20); | |
72 | #endif | |
73 | ||
74 | addr.sin_family = AF_INET; | |
75 | addr.sin_port = 0; | |
76 | addr.sin_addr.s_addr = htonl(INADDR_ANY); | |
77 | ||
78 | to.sin_family = AF_INET; | |
79 | to.sin_port = htons(to_port); | |
80 | to.sin_addr.s_addr = inet_addr(to_ip); | |
81 | ||
82 | status = bind(fd, (struct sockaddr*)&addr, sizeof(addr)); | |
83 | if(status == -1) | |
84 | fatal("bind", NULL); | |
85 | ||
86 | status = connect(cfd, (struct sockaddr*)&to, sizeof(to)); | |
87 | if(status == -1) | |
88 | fatal("connect", "Can not connect to server"); | |
89 | ||
90 | for(seq = 0; ; seq++) { | |
91 | ssize_t written; | |
92 | uint64_t now; | |
93 | fd_set rfds; | |
94 | struct timeval tv; | |
95 | ||
96 | /* Check if asked to stop */ | |
97 | FD_ZERO(&rfds); | |
98 | FD_SET(cfd, &rfds); | |
99 | tv.tv_sec = 0; | |
100 | tv.tv_usec = 0; | |
101 | status = select(cfd + 1, &rfds, NULL, NULL, &tv); | |
102 | if(status == -1) | |
103 | fatal("select", NULL); | |
104 | ||
105 | if(status) { | |
106 | status = recv(cfd, buffer, 8, 0); | |
107 | if(status == -1) | |
108 | fatal("recv", NULL); | |
109 | if(((uint64_t *)buffer)[0] == 0xdeadbeef) | |
110 | break; | |
111 | fatal(NULL, "Received invalid control message"); | |
112 | } | |
113 | ||
114 | now = current_time(); | |
115 | if(pkt_size >= sizeof(uint64_t)) | |
116 | ((uint64_t *)buffer)[0] = now; | |
117 | if(pkt_size >= 2 * sizeof(uint64_t)) | |
118 | ((uint64_t *)buffer)[1] = seq; | |
119 | ||
120 | written = sendto(fd, buffer, pkt_size, 0, (struct sockaddr *)&to, | |
121 | sizeof(to)); | |
122 | if(written == -1 && (errno == EWOULDBLOCK || errno == EAGAIN)) | |
123 | continue; | |
124 | if(written == -1) | |
125 | fatal("sendto", NULL); | |
126 | } | |
127 | free(buffer); | |
128 | status = close(cfd); | |
129 | if(status == -1) | |
130 | fatal("close", "Unable to close socket"); | |
131 | status = close(fd); | |
132 | if(status == -1) | |
133 | fatal("close", "Unable to close socket"); | |
134 | } | |
135 | ||
136 | static uint64_t current_time(void) { | |
137 | struct timeval tv; | |
138 | uint64_t current_time; | |
139 | int status; | |
140 | ||
141 | status = gettimeofday(&tv, 0); | |
142 | if(status == -1) | |
143 | fatal("gettimeofday", "Unable to get current time\n"); | |
144 | current_time = tv.tv_sec * 1000000 + tv.tv_usec; | |
145 | return current_time; | |
146 | } | |
147 | ||
148 | static void run_server(int port, uint64_t max_time, uint64_t max_pkts, | |
149 | uint64_t max_bytes, bool verbose) { | |
150 | struct sockaddr_in addr; | |
151 | int fd, cfd, serverfd, status; | |
152 | uint64_t now, last_ts, last_seq, preceived, breceived, errors; | |
153 | uint64_t start, tot_delay, max_delay, min_delay, last_delay; | |
154 | double jitter = 0.0L; | |
155 | ssize_t pkt_size = -1, buffer_sz = 1 << 17; /* should be enough */ | |
156 | void *buffer; | |
157 | uint64_t magic = 0xdeadbeef; | |
158 | ||
159 | buffer = malloc(buffer_sz); | |
160 | if(! buffer) | |
161 | fatal("malloc", NULL); | |
162 | ||
163 | fd = socket(AF_INET, SOCK_DGRAM, 0); | |
164 | if(fd == -1) | |
165 | fatal("socket", "Unable to create udp socket"); | |
166 | ||
167 | serverfd = socket(AF_INET, SOCK_STREAM, 0); | |
168 | if(serverfd == -1) | |
169 | fatal("socket", "Unable to create tcp socket"); | |
170 | ||
171 | addr.sin_family = AF_INET; | |
172 | addr.sin_port = htons(port); | |
173 | addr.sin_addr.s_addr = htonl(INADDR_ANY); | |
174 | ||
175 | status = bind(fd,(struct sockaddr*)&addr, sizeof(addr)); | |
176 | if(status == -1) | |
177 | fatal("bind", "Unable to bind to specified port"); | |
178 | ||
179 | status = 1; /* no need for other var :) */ | |
180 | status = setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR, &status, | |
181 | sizeof(status)); | |
182 | if(status == -1) | |
183 | fatal("setsockopt", "Unable to set SO_REUSEADDR"); | |
184 | ||
185 | status = bind(serverfd,(struct sockaddr*)&addr, sizeof(addr)); | |
186 | if(status == -1) | |
187 | fatal("bind", "Unable to bind to specified port"); | |
188 | ||
189 | status = listen(serverfd, 1); | |
190 | if(status == -1) | |
191 | fatal("listen", "Unable to receive connections"); | |
192 | ||
193 | cfd = accept(serverfd, NULL, 0); | |
194 | if(cfd == -1) | |
195 | fatal("accept", "Unable to receive connection"); | |
196 | ||
197 | preceived = breceived = errors = 0; | |
198 | last_ts = last_seq = start = 0; | |
199 | tot_delay = max_delay = 0; last_delay = min_delay = -1; | |
200 | while(true) { | |
201 | uint64_t ts = 0, seq = 0; | |
202 | ssize_t received; | |
203 | ||
204 | received = recvfrom(fd, buffer, buffer_sz, 0, 0, 0); | |
205 | now = current_time(); | |
206 | ||
207 | if(received >= sizeof(uint64_t)) | |
208 | ts = ((uint64_t *)buffer)[0]; | |
209 | if(received >= 2 * sizeof(uint64_t)) | |
210 | seq = ((uint64_t *)buffer)[1]; | |
211 | ||
212 | if(pkt_size == -1) { | |
213 | /* init: first packet is ignored */ | |
214 | pkt_size = received; | |
215 | last_ts = ts; | |
216 | last_seq = seq; | |
217 | start = now; | |
218 | } else { | |
219 | if(pkt_size != received) { | |
220 | errors++; | |
221 | fprintf(stderr, "Received packet of invalid size %ld.\n", | |
222 | received); | |
223 | } else { | |
224 | preceived++; | |
225 | breceived += received; | |
226 | breceived += HDR_SIZE; | |
227 | if(ts) { | |
228 | if(last_delay >= 0) { | |
229 | double delta; | |
230 | if(last_delay > now - ts) | |
231 | delta = last_delay - (now - ts); | |
232 | else | |
233 | delta = (now - ts) - last_delay; | |
234 | jitter += (delta - jitter) / 16.0; | |
235 | } | |
236 | last_delay = now - ts; | |
237 | tot_delay += last_delay; | |
238 | if(last_delay < min_delay) | |
239 | min_delay = last_delay; | |
240 | if(last_delay > max_delay) | |
241 | max_delay = last_delay; | |
242 | } | |
243 | if((ts && ts <= last_ts) || (seq && seq <= last_seq)) { | |
244 | errors++; | |
245 | fprintf(stderr, "Packet received out of order.\n"); | |
246 | } | |
247 | last_ts = ts; | |
248 | last_seq = seq; | |
249 | } | |
250 | if((max_pkts && preceived + errors >= max_pkts) || | |
251 | (max_time && now - start >= max_time) || | |
252 | (max_bytes && breceived >= max_bytes)) | |
253 | break; | |
254 | } | |
255 | } | |
256 | free(buffer); | |
257 | ||
258 | /* Tell client to die */ | |
259 | send(cfd, &magic, sizeof(magic), 0); | |
260 | status = close(cfd); | |
261 | if(status == -1) | |
262 | fatal("close", "Unable to close socket"); | |
263 | status = close(serverfd); | |
264 | if(status == -1) | |
265 | fatal("close", "Unable to close socket"); | |
266 | ||
267 | if(verbose) { | |
268 | printf("Received: %ld bytes %ld packets (size %ld/%ld) %ld errors.\n", | |
269 | breceived, preceived, pkt_size + HDR_SIZE, pkt_size, errors); | |
270 | printf("Delay: %ld/%ld/%ld (min/avg/max). Jitter: %lf. Time: %ld us\n", | |
271 | min_delay, tot_delay / preceived, max_delay, jitter, | |
272 | now - start); | |
273 | printf("Bandwidth: %ld bit/s.\n", | |
274 | (long)(1.0L * (breceived * 8000000) / (now - start))); | |
275 | } else { | |
276 | printf("brx:%ld prx:%ld pksz:%ld plsz:%ld err:%ld ", | |
277 | breceived, preceived, pkt_size + HDR_SIZE, pkt_size, errors); | |
278 | printf("mind:%ld avgd:%ld maxd:%ld jit:%lf time:%ld ", | |
279 | min_delay, tot_delay / preceived, max_delay, jitter, | |
280 | now - start); | |
281 | } | |
282 | ||
283 | status = close(fd); | |
284 | if(status == -1) | |
285 | fatal("close", "Unable to close socket"); | |
286 | } | |
287 | #define CHECK_INT_ARG(arg, name, value) \ | |
288 | if(strncmp(arg, "--"name"=", strlen("--"name"=")) == 0) { \ | |
289 | value = atoi(arg + strlen("--"name"=")); \ | |
290 | continue; \ | |
291 | } | |
292 | #define CHECK_LLINT_ARG(arg, name, value) \ | |
293 | if(strncmp(arg, "--"name"=", strlen("--"name"=")) == 0) { \ | |
294 | value = atoll(arg + strlen("--"name"=")); \ | |
295 | continue; \ | |
296 | } | |
297 | #define CHECK_STR_ARG(arg, name, value) \ | |
298 | if(strncmp(arg, "--"name"=", strlen("--"name"=")) == 0) { \ | |
299 | value = arg + strlen("--"name"="); \ | |
300 | continue; \ | |
301 | } | |
302 | ||
303 | static char *progname; | |
304 | void usage(FILE *f) { | |
305 | char *filler, *sp = " "; | |
306 | if(strlen(progname) < strlen(sp)) | |
307 | filler = sp + strlen(sp) - strlen(progname); | |
308 | else | |
309 | filler = sp; | |
310 | ||
311 | fprintf(f, "\n"); | |
312 | fprintf(f, "Usage: %s --client [--host=HOST] [--port=PORT] " | |
313 | "[--pktsize=BYTES]\n", progname); | |
314 | fprintf(f, " %s --server [--port=PORT] [--max-time=SECS] " | |
315 | "[--max-pkts=NUM]\n", progname); | |
316 | fprintf(f, " %s [--max-bytes=BYTES] [--verbose]\n", filler); | |
317 | } | |
318 | ||
319 | int main(int argc, char *argv[]) { | |
320 | uint64_t max_time = 0, max_pkts = 0, max_bytes = 0; | |
321 | int pkt_size = 1500, port = 5000; | |
322 | const char *to_ip = "127.0.0.1"; | |
323 | bool server = false, client = false, verbose = false; | |
324 | char **arg = argv + 1; | |
325 | ||
326 | progname = strrchr(argv[0], '/'); | |
327 | if(progname) | |
328 | progname++; /* skip over the slash */ | |
329 | else | |
330 | progname = argv[0]; | |
331 | ||
332 | for(; *arg != 0; arg++) | |
333 | { | |
334 | CHECK_INT_ARG(*arg, "pktsize", pkt_size); | |
335 | CHECK_INT_ARG(*arg, "port", port); | |
336 | CHECK_LLINT_ARG(*arg, "max-time", max_time); | |
337 | CHECK_LLINT_ARG(*arg, "max-pkts", max_pkts); | |
338 | CHECK_LLINT_ARG(*arg, "max-bytes", max_bytes); | |
339 | CHECK_STR_ARG(*arg, "host", to_ip); | |
340 | if(strcmp(*arg, "--server") == 0) { | |
341 | server = true; | |
342 | continue; | |
343 | } | |
344 | if(strcmp(*arg, "--client") == 0) { | |
345 | client = true; | |
346 | continue; | |
347 | } | |
348 | if(strcmp(*arg, "--verbose") == 0) { | |
349 | verbose = true; | |
350 | continue; | |
351 | } | |
352 | if(strcmp(*arg, "--help") == 0) { | |
353 | usage(stdout); | |
354 | exit(0); | |
355 | } | |
356 | fprintf(stderr, "Unknown parameter: %s\n", *arg); | |
357 | usage(stderr); | |
358 | exit(1); | |
359 | } | |
360 | if(client == server) { | |
361 | fprintf(stderr, | |
362 | "Exactly one of --client and --server must be specified.\n"); | |
363 | usage(stderr); | |
364 | exit(1); | |
365 | } | |
366 | if(!(max_time || max_pkts || max_bytes)) | |
367 | max_time = 10; | |
368 | max_time *= 1000000; | |
369 | if(client) | |
370 | run_client(to_ip, port, pkt_size); | |
371 | else | |
372 | run_server(port, max_time, max_pkts, max_bytes, verbose); | |
373 | return 0; | |
374 | } |
0 | python-nemu (0.3.1-2) UNRELEASED; urgency=medium | |
0 | python-nemu (0.3.1+git20210810.1.3f7c571-1) UNRELEASED; urgency=medium | |
1 | 1 | |
2 | [ Martín Ferrari ] | |
2 | 3 | * Add examples. |
3 | 4 | |
4 | -- Martín Ferrari <tincho@debian.org> Fri, 02 Dec 2016 11:14:26 +0100 | |
5 | [ Debian Janitor ] | |
6 | * New upstream snapshot. | |
7 | ||
8 | -- Martín Ferrari <tincho@debian.org> Mon, 15 Nov 2021 01:04:29 -0000 | |
5 | 9 | |
6 | 10 | python-nemu (0.3.1-1) unstable; urgency=medium |
7 | 11 |
0 | IMGS = openlogo.svg | |
1 | PDF_IMGS := $(patsubst %.svg,%.pdf,$(patsubst %.dia,%.pdf,$(IMGS))) | |
2 | DVI_IMGS := $(patsubst %.svg,%.eps,$(patsubst %.dia,%.eps,$(IMGS))) | |
3 | ||
4 | ALL = nemu.pdf | |
5 | ||
6 | all: $(ALL) | |
7 | ||
8 | %.eps: %.dia | |
9 | inkscape -E $@ $< | |
10 | ||
11 | %.pdf: %.dia | |
12 | inkscape -A $@ $< | |
13 | ||
14 | %.eps: %.svg | |
15 | inkscape -E $@ $< | |
16 | ||
17 | %.pdf: %.svg | |
18 | inkscape -A $@ $< | |
19 | ||
20 | %.ps: %.dvi | |
21 | dvips $< | |
22 | ||
23 | nemu.dvi: nemu.tex $(DVI_IMGS) | |
24 | latex $< | |
25 | latex $< | |
26 | ||
27 | nemu.pdf: nemu.tex $(PDF_IMGS) | |
28 | pdflatex $< | |
29 | pdflatex $< | |
30 | ||
31 | clean: | |
32 | rm -f $(PDF_IMGS) $(DVI_IMGS) *.aux *.out *.log *.dvi *.nav *.snm \ | |
33 | *.toc *.vrb *.bak $(ALL) |
0 | % vim:ts=2:sw=2:et:ai:sts=2 | |
1 | \documentclass{beamer} | |
2 | \mode<presentation> | |
3 | { | |
4 | \usetheme{Boadilla} % simple | |
5 | \usecolortheme{seahorse} | |
6 | \useinnertheme{rectangles} | |
7 | } | |
8 | ||
9 | \usepackage[english]{babel} | |
10 | \usepackage[utf8]{inputenc} | |
11 | \usepackage[normalem]{ulem} | |
12 | ||
13 | \DeclareRobustCommand{\hsout}[1]{\texorpdfstring{\sout{#1}}{#1}} | |
14 | \pgfdeclareimage[height=0.5cm]{debian-logo}{openlogo} | |
15 | \pgfdeclareimage[height=2cm]{debian-logo-big}{openlogo} | |
16 | ||
17 | \title{Introducing Nemu} | |
18 | \subtitle{Network EMUlator in a \hsout{box} Python library} | |
19 | ||
20 | \author{Martín Ferrari} | |
21 | \institute[DebConf 12]{\pgfuseimage{debian-logo-big}} | |
22 | ||
23 | \date{July 14, 2012} | |
24 | \subject{Talks} | |
25 | \logo{\pgfuseimage{debian-logo}} | |
26 | ||
27 | \begin{document} | |
28 | ||
29 | \begin{frame} | |
30 | \titlepage | |
31 | \end{frame} | |
32 | ||
33 | \begin{frame}{What is Nemu?} | |
34 | \begin{itemize} | |
35 | \item A \alert{python} library, | |
36 | \item to create \alert{emulated networks}, | |
37 | \item and run \alert{tests and experiments} | |
38 | \item that can be \alert{repeated}. | |
39 | \item[]{} | |
40 | \item[] \em{A by-product of research that found a practical use.} | |
41 | \end{itemize} | |
42 | \end{frame} | |
43 | ||
44 | \begin{frame}{What can I use it for?} | |
45 | \begin{itemize} | |
46 | \item Test your new peer-to-peer application. | |
47 | \item[] \small{\em{Run 50 instances in your machine!}} | |
48 | \vfill | |
49 | \item Observe behaviour on unreliable networks. | |
50 | \item[] \small{\em{Configure packet loss, delay, throughput...}} | |
51 | \vfill | |
52 | \item Justify your changes with experimental data. | |
53 | \item[] \small{\em{Make your script output nice GNUPlot graphs!}} | |
54 | \vfill | |
55 | \item Verify configuration changes before applying to the production network. | |
56 | \item[] \small{\em{Change iptables and routing configuration with | |
57 | confidence!}} | |
58 | \vfill | |
59 | \item Distribute your experiment/test easily, no configuration needed! | |
60 | \item[] \small{\em{Here, execute this and see for yourself!}} | |
61 | \end{itemize} | |
62 | \end{frame} | |
63 | ||
64 | \begin{frame}[fragile]{How does it look like?} | |
65 | \begin{semiverbatim} | |
66 | import nemu | |
67 | ||
68 | node0 = nemu.Node() | |
69 | node1 = nemu.Node() | |
70 | ||
71 | (if0, if1) = nemu.P2PInterface.create_pair(node0, node1) | |
72 | if0.up = if1.up = True | |
73 | ||
74 | if0.add_v4_address(address='10.0.0.1', prefix_len=24) | |
75 | if1.add_v4_address(address='10.0.0.2', prefix_len=24) | |
76 | ||
77 | node0.system("ping -c 5 10.0.0.2") | |
78 | \end{semiverbatim} | |
79 | \end{frame} | |
80 | ||
81 | \begin{frame}{Resources} | |
82 | Related projects:\\ | |
83 | \begin{itemize} | |
84 | \item NEPI: original project that spawned the development of Nemu.\\ | |
85 | High-level network description, GUI, multiple back-ends. | |
86 | \item Mininet: similar project from Stanford, developed at the same time. | |
87 | \end{itemize} | |
88 | \hfill | |
89 | ||
90 | Links:\\ | |
91 | \begin{itemize} | |
92 | \item Nemu homepage: \texttt{http://code.google.com/p/nemu/} | |
93 | \item NEPI homepage: \texttt{http://nepi.pl.sophia.inria.fr/} | |
94 | \item This slides + code: | |
95 | \texttt{\$HOME/source/browse/docs/debconf-talk/} | |
96 | \end{itemize} | |
97 | \end{frame} | |
98 | \end{document} |
0 | <?xml version="1.0" encoding="utf-8"?> | |
1 | <!-- Generator: Adobe Illustrator 10.0, SVG Export Plug-In . SVG Version: 3.0.0 Build 77) --> | |
2 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [ | |
3 | <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/"> | |
4 | <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/"> | |
5 | <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/"> | |
6 | <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/"> | |
7 | <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/"> | |
8 | <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/"> | |
9 | <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/"> | |
10 | <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/"> | |
11 | <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/"> | |
12 | <!ENTITY ns_svg "http://www.w3.org/2000/svg"> | |
13 | <!ENTITY ns_xlink "http://www.w3.org/1999/xlink"> | |
14 | ]> | |
15 | <svg | |
16 | xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;" i:viewOrigin="251 467" i:rulerOrigin="0 0" i:pageBounds="0 792 612 0" | |
17 | xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" | |
18 | width="108.758" height="144.133" viewBox="0 0 108.758 144.133" overflow="visible" enable-background="new 0 0 108.758 144.133" | |
19 | xml:space="preserve"> | |
20 | <metadata> | |
21 | <variableSets xmlns="&ns_vars;"> | |
22 | <variableSet varSetName="binding1" locked="none"> | |
23 | <variables></variables> | |
24 | <v:sampleDataSets xmlns="&ns_custom;" xmlns:v="&ns_vars;"></v:sampleDataSets> | |
25 | </variableSet> | |
26 | </variableSets> | |
27 | <sfw xmlns="&ns_sfw;"> | |
28 | <slices></slices> | |
29 | <sliceSourceBounds y="322.867" x="251" width="108.758" height="144.133" bottomLeftOrigin="true"></sliceSourceBounds> | |
30 | </sfw> | |
31 | </metadata> | |
32 | <g id="Layer_1" i:layer="yes" i:dimmedPercent="50" i:rgbTrio="#4F008000FFFF"> | |
33 | <g> | |
34 | <path i:knockout="Off" fill="#D70751" d="M60.969,47.645c-1.494,0.02,0.281,0.768,2.232,1.069 | |
35 | c0.541-0.422,1.027-0.846,1.463-1.26C63.451,47.751,62.215,47.758,60.969,47.645"/> | |
36 | <path i:knockout="Off" fill="#D70751" d="M68.986,45.646c0.893-1.229,1.541-2.573,1.77-3.963 | |
37 | c-0.201,0.99-0.736,1.845-1.244,2.749c-2.793,1.759-0.264-1.044-0.002-2.111C66.508,46.104,69.096,44.589,68.986,45.646"/> | |
38 | <path i:knockout="Off" fill="#D70751" d="M71.949,37.942c0.182-2.691-0.529-1.839-0.768-0.814 | |
39 | C71.459,37.274,71.68,39.026,71.949,37.942"/> | |
40 | <path i:knockout="Off" fill="#D70751" d="M55.301,1.163c0.798,0.142,1.724,0.252,1.591,0.443 | |
41 | C57.768,1.413,57.965,1.239,55.301,1.163"/> | |
42 | <path i:knockout="Off" fill="#D70751" d="M56.893,1.606l-0.561,0.117l0.523-0.048L56.893,1.606"/> | |
43 | <path i:knockout="Off" fill="#D70751" d="M81.762,38.962c0.09,2.416-0.705,3.59-1.424,5.666l-1.293,0.643 | |
44 | c-1.057,2.054,0.105,1.304-0.652,2.937c-1.652,1.467-5.006,4.589-6.08,4.875c-0.785-0.017,0.531-0.926,0.703-1.281 | |
45 | c-2.209,1.516-1.773,2.276-5.152,3.199l-0.098-0.221c-8.33,3.92-19.902-3.847-19.75-14.443c-0.088,0.672-0.253,0.504-0.437,0.774 | |
46 | c-0.43-5.451,2.518-10.926,7.49-13.165c4.863-2.406,10.564-1.42,14.045,1.829c-1.912-2.506-5.721-5.163-10.232-4.917 | |
47 | c-4.421,0.072-8.558,2.881-9.938,5.932c-2.264,1.425-2.528,5.496-3.514,6.242c-1.329,9.76,2.497,13.975,8.97,18.936 | |
48 | c1.016,0.686,0.286,0.791,0.422,1.313c-2.15-1.006-4.118-2.526-5.738-4.387c0.86,1.257,1.787,2.479,2.986,3.439 | |
49 | c-2.029-0.685-4.738-4.913-5.527-5.085c3.495,6.258,14.178,10.975,19.775,8.634c-2.59,0.096-5.879,0.053-8.787-1.022 | |
50 | c-1.225-0.629-2.884-1.93-2.587-2.173c7.636,2.851,15.522,2.158,22.128-3.137c1.682-1.31,3.518-3.537,4.049-3.567 | |
51 | c-0.799,1.202,0.137,0.578-0.477,1.639c1.672-2.701-0.729-1.1,1.73-4.664l0.908,1.25c-0.34-2.244,2.785-4.966,2.467-8.512 | |
52 | c0.717-1.084,0.799,1.168,0.039,3.662c1.055-2.767,0.279-3.212,0.549-5.496c0.291,0.768,0.678,1.583,0.875,2.394 | |
53 | c-0.688-2.675,0.703-4.503,1.049-6.058c-0.342-0.15-1.061,1.182-1.227-1.976c0.025-1.372,0.383-0.719,0.52-1.057 | |
54 | c-0.268-0.155-0.975-1.207-1.404-3.224c0.309-0.475,0.832,1.229,1.256,1.298c-0.273-1.603-0.742-2.826-0.762-4.057 | |
55 | c-1.24-2.59-0.439,0.346-1.443-1.112c-1.32-4.114,1.094-0.955,1.258-2.823c1.998,2.895,3.137,7.385,3.662,9.244 | |
56 | c-0.4-2.267-1.045-4.464-1.834-6.589c0.609,0.257-0.979-4.663,0.791-1.405c-1.889-6.945-8.078-13.435-13.773-16.479 | |
57 | c0.695,0.637,1.574,1.437,1.26,1.563c-2.834-1.685-2.336-1.818-2.742-2.53c-2.305-0.939-2.459,0.077-3.984,0.002 | |
58 | c-4.35-2.308-5.188-2.063-9.191-3.507l0.182,0.852c-2.881-0.96-3.357,0.362-6.47,0.002c-0.189-0.147,0.998-0.536,1.976-0.677 | |
59 | c-2.786,0.368-2.656-0.55-5.382,0.101c0.671-0.471,1.383-0.784,2.099-1.184c-2.271,0.138-5.424,1.322-4.451,0.244 | |
60 | c-3.705,1.654-10.286,3.975-13.979,7.438l-0.116-0.776c-1.692,2.031-7.379,6.066-7.832,8.699l-0.453,0.105 | |
61 | c-0.879,1.491-1.45,3.18-2.148,4.713c-1.151,1.963-1.688,0.756-1.524,1.064c-2.265,4.592-3.392,8.45-4.363,11.616 | |
62 | c0.692,1.035,0.017,6.232,0.278,10.391c-1.136,20.544,14.418,40.489,31.42,45.093c2.492,0.893,6.197,0.861,9.349,0.949 | |
63 | c-3.718-1.064-4.198-0.563-7.822-1.826c-2.613-1.232-3.185-2.637-5.037-4.244l0.733,1.295c-3.63-1.285-2.111-1.59-5.065-2.525 | |
64 | l0.783-1.021c-1.177-0.09-3.117-1.982-3.647-3.033l-1.288,0.051c-1.546-1.906-2.371-3.283-2.31-4.35l-0.416,0.742 | |
65 | c-0.471-0.809-5.691-7.158-2.983-5.68c-0.503-0.458-1.172-0.747-1.897-2.066l0.551-0.629c-1.301-1.677-2.398-3.826-2.314-4.542 | |
66 | c0.695,0.938,1.177,1.114,1.655,1.275c-3.291-8.164-3.476-0.449-5.967-8.31l0.526-0.042c-0.403-0.611-0.65-1.27-0.974-1.919 | |
67 | l0.23-2.285c-2.368-2.736-0.662-11.645-0.319-16.53c0.235-1.986,1.977-4.101,3.3-7.418l-0.806-0.138 | |
68 | c1.542-2.688,8.802-10.799,12.166-10.383c1.629-2.046-0.324-0.008-0.643-0.522c3.579-3.703,4.704-2.616,7.119-3.283 | |
69 | c2.603-1.545-2.235,0.604-1.001-0.589c4.503-1.149,3.19-2.614,9.063-3.197c0.62,0.352-1.437,0.544-1.953,1.001 | |
70 | c3.75-1.836,11.869-1.417,17.145,1.018c6.117,2.861,12.994,11.314,13.266,19.267l0.309,0.083 | |
71 | c-0.156,3.162,0.484,6.819-0.627,10.177L81.762,38.962"/> | |
72 | <path i:knockout="Off" fill="#D70751" d="M44.658,49.695l-0.211,1.047c0.983,1.335,1.763,2.781,3.016,3.821 | |
73 | C46.561,52.804,45.892,52.077,44.658,49.695"/> | |
74 | <path i:knockout="Off" fill="#D70751" d="M46.979,49.605c-0.52-0.576-0.826-1.268-1.172-1.956 | |
75 | c0.33,1.211,1.006,2.252,1.633,3.312L46.979,49.605"/> | |
76 | <path i:knockout="Off" fill="#D70751" d="M88.063,40.675l-0.219,0.552c-0.402,2.858-1.273,5.686-2.605,8.309 | |
77 | C86.711,46.769,87.66,43.742,88.063,40.675"/> | |
78 | <path i:knockout="Off" fill="#D70751" d="M55.598,0.446C56.607,0.077,58.08,0.243,59.154,0c-1.398,0.117-2.789,0.187-4.162,0.362 | |
79 | L55.598,0.446"/> | |
80 | <path i:knockout="Off" fill="#D70751" d="M20.127,19.308c0.233,2.154-1.62,2.991,0.41,1.569 | |
81 | C21.627,18.423,20.113,20.2,20.127,19.308"/> | |
82 | <path i:knockout="Off" fill="#D70751" d="M17.739,29.282c0.469-1.437,0.553-2.299,0.732-3.132 | |
83 | C17.178,27.804,17.875,28.157,17.739,29.282"/> | |
84 | <path i:knockout="Off" d="M13.437,125.506c-0.045,0.047-0.045,7.506-0.138,9.453c-0.092,1.574-0.232,4.957-3.568,4.957 | |
85 | c-3.429,0-4.263-3.939-4.541-5.652c-0.324-1.9-0.324-3.477-0.324-4.17c0-2.225,0.139-8.436,5.375-8.436 | |
86 | c1.576,0,2.456,0.465,3.151,0.834L13.437,125.506z M0,130.975c0,13.066,6.951,13.066,7.97,13.066 | |
87 | c2.873,0,4.727-1.576,5.514-4.309l0.093,4.123c0.881-0.047,1.761-0.139,3.197-0.139c0.51,0,0.926,0,1.298,0.047 | |
88 | c0.371,0,0.741,0.045,1.158,0.092c-0.741-1.482-1.297-4.818-1.297-12.049c0-7.043,0-18.951,0.602-22.566 | |
89 | c-1.667,0.789-3.105,1.299-6.256,1.576c1.251,1.344,1.251,2.039,1.251,8.154c-0.879-0.277-1.992-0.602-3.892-0.602 | |
90 | C1.344,118.369,0,125.598,0,130.975"/> | |
91 | <path i:knockout="Off" d="M25.13,128.609c0.047-3.846,0.835-7.275,4.124-7.275c3.615,0,3.891,3.984,3.799,7.275H25.13z | |
92 | M37.64,129.074c0-5.422-1.065-10.752-7.923-10.752c-9.452,0-9.452,10.475-9.452,12.697c0,9.406,4.216,13.113,11.306,13.113 | |
93 | c3.149,0,4.68-0.461,5.514-0.695c-0.046-1.668,0.185-2.734,0.465-4.17c-0.975,0.604-2.226,1.391-5.006,1.391 | |
94 | c-7.229,0-7.322-6.582-7.322-8.852H37.55L37.64,129.074"/> | |
95 | <path i:knockout="Off" d="M52.715,131.066c0,4.309-0.787,10.102-6.162,10.102c-0.742,0-1.668-0.141-2.27-0.279 | |
96 | c-0.093-1.668-0.093-4.541-0.093-7.877c0-3.986,0.416-6.068,0.742-7.09c0.972-3.289,3.15-3.334,3.566-3.334 | |
97 | C52.02,122.588,52.715,127.453,52.715,131.066z M39.417,136.117c0,3.43,0,5.375-0.556,6.857c1.9,0.742,4.262,1.158,7.09,1.158 | |
98 | c1.807,0,7.043,0,9.869-5.791c1.344-2.688,1.807-6.303,1.807-9.037c0-1.668-0.186-5.328-1.529-7.646 | |
99 | c-1.296-2.176-3.382-3.289-5.605-3.289c-4.449,0-5.746,3.707-6.44,5.607c0-2.363,0.045-10.611,0.415-14.828 | |
100 | c-3.011,1.391-4.866,1.621-6.857,1.807c1.807,0.74,1.807,3.801,1.807,13.764V136.117"/> | |
101 | <path i:knockout="Off" d="M66.535,143.855c-0.928-0.139-1.578-0.232-2.922-0.232c-1.48,0-2.502,0.094-3.566,0.232 | |
102 | c0.463-0.881,0.648-1.299,0.787-4.309c0.186-4.125,0.232-15.154-0.092-17.471c-0.232-1.762-0.648-2.039-1.297-2.502 | |
103 | c3.799-0.371,4.865-0.648,6.625-1.482c-0.369,2.037-0.418,3.059-0.418,6.162C65.561,140.242,65.514,141.955,66.535,143.855"/> | |
104 | <path i:knockout="Off" d="M81.373,130.74c-0.092,2.92-0.139,4.959-0.928,6.58c-0.973,2.086-2.594,2.688-3.799,2.688 | |
105 | c-2.783,0-3.383-2.316-3.383-4.586c0-4.355,3.893-4.682,5.652-4.682H81.373z M68.629,136.441c0,2.92,0.881,5.838,3.477,7.09 | |
106 | c1.158,0.51,2.316,0.51,2.688,0.51c4.264,0,5.699-3.152,6.58-5.098c-0.047,2.039,0,3.289,0.139,4.912 | |
107 | c0.834-0.047,1.668-0.139,3.059-0.139c0.787,0,1.529,0.092,2.316,0.139c-0.51-0.787-0.787-1.252-0.928-3.059 | |
108 | c-0.092-1.76-0.092-3.521-0.092-5.977l0.047-9.453c0-3.523-0.928-6.998-7.879-6.998c-4.586,0-7.273,1.391-8.617,2.086 | |
109 | c0.557,1.02,1.02,1.898,1.436,3.893c1.809-1.576,4.172-2.41,6.58-2.41c3.848,0,3.848,2.549,3.848,6.162 | |
110 | c-0.881-0.045-1.623-0.137-2.875-0.137C72.521,127.963,68.629,130.23,68.629,136.441"/> | |
111 | <path i:knockout="Off" d="M108.063,139.268c0.047,1.576,0.047,3.244,0.695,4.588c-1.021-0.092-1.623-0.232-3.521-0.232 | |
112 | c-1.113,0-1.715,0.094-2.596,0.232c0.184-0.602,0.279-0.834,0.371-1.623c0.139-1.064,0.232-4.633,0.232-5.885v-5.004 | |
113 | c0-2.178,0-5.33-0.141-6.441c-0.092-0.787-0.322-2.918-3.012-2.918c-2.641,0-3.521,1.945-3.846,3.521 | |
114 | c-0.369,1.621-0.369,3.383-0.369,10.24c0.045,5.932,0.045,6.486,0.508,8.109c-0.787-0.092-1.76-0.184-3.15-0.184 | |
115 | c-1.113,0-1.854,0.045-2.779,0.184c0.324-0.742,0.51-1.113,0.602-3.707c0.094-2.549,0.279-15.061-0.141-18.025 | |
116 | c-0.23-1.809-0.695-2.225-1.203-2.688c3.754-0.186,4.957-0.789,6.117-1.389v4.91c0.555-1.438,1.713-4.635,6.348-4.635 | |
117 | c5.793,0,5.838,4.217,5.885,6.996V139.268"/> | |
118 | <path i:knockout="Off" fill="#D70751" d="M66.926,111.533l-3.838,3.836l-3.836-3.836l3.836-3.836L66.926,111.533"/> | |
119 | </g> | |
120 | </g> | |
121 | </svg> |
0 | #!/usr/bin/env python | |
1 | # vim:ts=4:sw=4:et:ai:sts=4 | |
2 | import os, nemu, subprocess, time | |
3 | ||
4 | xterm = nemu.environ.find_bin("xterm") | |
5 | mtr = nemu.environ.find_bin("mtr") | |
6 | X = "DISPLAY" in os.environ and xterm | |
7 | ||
8 | # Do not use X stuff. | |
9 | X = False | |
10 | ||
11 | # each Node is a netns | |
12 | node = [] | |
13 | switch = [] | |
14 | iface = {} | |
15 | SIZE = 5 | |
16 | for i in range(SIZE): | |
17 | node.append(nemu.Node(forward_X11 = X)) | |
18 | next_pair = (i, i + 1) | |
19 | prev_pair = (i, i - 1) | |
20 | if i < SIZE - 1: | |
21 | iface[(i, i + 1)] = nemu.NodeInterface(node[i]) | |
22 | iface[(i, i + 1)].up = True | |
23 | iface[(i, i + 1)].add_v4_address(address='10.0.%d.1' % i, prefix_len=24) | |
24 | if i > 0: | |
25 | iface[(i, i - 1)] = nemu.NodeInterface(node[i]) | |
26 | iface[(i, i - 1)].up = True | |
27 | iface[(i, i - 1)].add_v4_address(address='10.0.%d.2' % (i - 1), | |
28 | prefix_len=24) | |
29 | switch.append(nemu.Switch()) | |
30 | switch[-1].connect(iface[(i, i - 1)]) | |
31 | switch[-1].connect(iface[(i - 1, i)]) | |
32 | switch[-1].up = True | |
33 | # Configure routing | |
34 | for j in range(SIZE - 1): | |
35 | if j in (i, i - 1): | |
36 | continue | |
37 | if j < i: | |
38 | node[i].add_route(prefix='10.0.%d.0' % j, prefix_len=24, | |
39 | nexthop='10.0.%d.1' % (i - 1)) | |
40 | else: | |
41 | node[i].add_route(prefix='10.0.%d.0' % j, prefix_len=24, | |
42 | nexthop='10.0.%d.2' % i) | |
43 | ||
44 | print "Nodes started with pids: %s" % str([n.pid for n in node]) | |
45 | ||
46 | #switch0 = nemu.Switch( | |
47 | # bandwidth = 100 * 1024 * 1024, | |
48 | # delay = 0.1, # 100 ms | |
49 | # delay_jitter = 0.01, # 10ms | |
50 | # delay_correlation = 0.25, # 25% correlation | |
51 | # loss = 0.005) | |
52 | ||
53 | # Test connectivity first. Run process, hide output and check | |
54 | # return code | |
55 | null = file("/dev/null", "w") | |
56 | app0 = node[0].Popen("ping -c 1 10.0.%d.2" % (SIZE - 2), shell=True, | |
57 | stdout=null) | |
58 | ret = app0.wait() | |
59 | assert ret == 0 | |
60 | ||
61 | app1 = node[-1].Popen("ping -c 1 10.0.0.1", shell = True, stdout = null) | |
62 | ret = app1.wait() | |
63 | assert ret == 0 | |
64 | print "Connectivity IPv4 OK!" | |
65 | ||
66 | if X: | |
67 | app = [] | |
68 | for i in range(SIZE - 1): | |
69 | height = 102 | |
70 | base = 25 | |
71 | cmd = "%s -eni %s" % (nemu.environ.TCPDUMP_PATH, iface[(i, i + 1)].name) | |
72 | xtermcmd = "%s -geometry 100x5+0+%d -T %s -e %s" % ( | |
73 | xterm, i * height + base, "node%d" % i, cmd) | |
74 | app.append(node[i].Popen(xtermcmd, shell=True)) | |
75 | ||
76 | app.append(node[-1].Popen("%s -n 10.0.0.1" % mtr, shell=True)) | |
77 | app[-1].wait() | |
78 | for i in range(SIZE - 1): | |
79 | app[i].signal() | |
80 | app[i].wait() | |
81 | else: | |
82 | node[-1].system("%s -n --report 10.0.0.1" % mtr) |
0 | #/usr/bin/env python | |
0 | #/usr/bin/env python2 | |
1 | 1 | # vim:ts=4:sw=4:et:ai:sts=4 |
2 | 2 | import nemu |
3 | 3 | import signal |
0 | #!/usr/bin/env python | |
0 | #!/usr/bin/env python2 | |
1 | 1 | # vim:ts=4:sw=4:et:ai:sts=4 |
2 | 2 | import os, nemu, subprocess, time |
3 | 3 |
0 | #!/usr/bin/env python | |
0 | #!/usr/bin/env python2 | |
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | # vim: ts=4:sw=4:et:ai:sts=4 |
3 | 3 | |
8 | 8 | version = '0.3.1', |
9 | 9 | description = 'A lightweight network emulator embedded in a small ' |
10 | 10 | 'python library.', |
11 | author = 'Martín Ferrari, Alina Quereilhac', | |
12 | author_email = 'martin.ferrari@gmail.com, aquereilhac@gmail.com', | |
13 | url = 'http://code.google.com/p/nemu/', | |
11 | author = 'Martina Ferrari, Alina Quereilhac', | |
12 | author_email = 'tina@tina.pm, aquereilhac@gmail.com', | |
13 | url = 'https://github.com/NightTsarina/nemu', | |
14 | 14 | license = 'GPLv2', |
15 | 15 | platforms = 'Linux', |
16 | 16 | packages = ['nemu'], |
17 | install_requires = ['python-unshare', 'python-passfd'], | |
17 | 18 | package_dir = {'': 'src'} |
18 | 19 | ) |
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | |
3 | 3 | # Copyright 2010, 2011 INRIA |
4 | # Copyright 2011 Martín Ferrari <martin.ferrari@gmail.com> | |
4 | # Copyright 2011 Martina Ferrari <tina@tina.pm> | |
5 | 5 | # |
6 | 6 | # This file is part of Nemu. |
7 | 7 | # |
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | |
3 | 3 | # Copyright 2010, 2011 INRIA |
4 | # Copyright 2011 Martín Ferrari <martin.ferrari@gmail.com> | |
4 | # Copyright 2011 Martina Ferrari <tina@tina.pm> | |
5 | 5 | # |
6 | 6 | # This file is part of Nemu. |
7 | 7 | # |
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | |
3 | 3 | # Copyright 2010, 2011 INRIA |
4 | # Copyright 2011 Martín Ferrari <martin.ferrari@gmail.com> | |
4 | # Copyright 2011 Martina Ferrari <tina@tina.pm> | |
5 | 5 | # |
6 | 6 | # This file is part of Nemu. |
7 | 7 | # |
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | |
3 | 3 | # Copyright 2010, 2011 INRIA |
4 | # Copyright 2011 Martín Ferrari <martin.ferrari@gmail.com> | |
4 | # Copyright 2011 Martina Ferrari <tina@tina.pm> | |
5 | 5 | # |
6 | 6 | # This file is part of Nemu. |
7 | 7 | # |
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | |
3 | 3 | # Copyright 2010, 2011 INRIA |
4 | # Copyright 2011 Martín Ferrari <martin.ferrari@gmail.com> | |
4 | # Copyright 2011 Martina Ferrari <tina@tina.pm> | |
5 | 5 | # |
6 | 6 | # This file is part of Nemu. |
7 | 7 | # |
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | |
3 | 3 | # Copyright 2010, 2011 INRIA |
4 | # Copyright 2011 Martín Ferrari <martin.ferrari@gmail.com> | |
4 | # Copyright 2011 Martina Ferrari <tina@tina.pm> | |
5 | 5 | # |
6 | 6 | # This file is part of Nemu. |
7 | 7 | # |
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | |
3 | 3 | # Copyright 2010, 2011 INRIA |
4 | # Copyright 2011 Martín Ferrari <martin.ferrari@gmail.com> | |
4 | # Copyright 2011 Martina Ferrari <tina@tina.pm> | |
5 | 5 | # |
6 | 6 | # This file is part of Nemu. |
7 | 7 | # |
0 | #!/usr/bin/env python | |
0 | #!/usr/bin/env python2 | |
1 | 1 | # vim:ts=4:sw=4:et:ai:sts=4 |
2 | 2 | |
3 | 3 | import grp, os, pwd, select, time, unittest |
0 | #!/usr/bin/env python | |
0 | #!/usr/bin/env python2 | |
1 | 1 | # vim:ts=4:sw=4:et:ai:sts=4 |
2 | 2 | |
3 | 3 | from test_util import get_devs, get_devs_netns |
0 | #!/usr/bin/env python | |
0 | #!/usr/bin/env python2 | |
1 | 1 | # vim:ts=4:sw=4:et:ai:sts=4 |
2 | 2 | |
3 | 3 | import nemu, nemu.environ, test_util |
0 | #!/usr/bin/env python | |
0 | #!/usr/bin/env python2 | |
1 | 1 | # vim:ts=4:sw=4:et:ai:sts=4 |
2 | 2 | |
3 | 3 | import nemu.protocol |
0 | #!/usr/bin/env python | |
0 | #!/usr/bin/env python2 | |
1 | 1 | # vim:ts=4:sw=4:et:ai:sts=4 |
2 | 2 | |
3 | 3 | import nemu, test_util |
0 | #!/usr/bin/env python | |
0 | #!/usr/bin/env python2 | |
1 | 1 | # vim:ts=4:sw=4:et:ai:sts=4 |
2 | 2 | |
3 | 3 | import nemu, test_util |