-
Notifications
You must be signed in to change notification settings - Fork 0
/
trans_tool.py
50 lines (40 loc) · 2.07 KB
/
trans_tool.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import datetime
import os.path
import random
def get_avail_algo():
cmd = 'sysctl net.ipv4.tcp_available_congestion_control'
algos = []
with os.popen(cmd, 'r') as f:
text = f.read()
algos.extend(text.split()[2:])
return algos
# print('Available algos are as follows:')
def upload_algo():
algos = ['tcp_westwood', 'tcp_vegas', 'tcp_bic', 'tcp_htcp', 'tcp_bbr']
for algo in algos:
os.system('sudo modprobe -a {}'.format(algo))
class TransTool:
def __init__(self, server_ip, server_port=5001, iperf=True):
self.server_ip = server_ip
self.server_port = server_port
self.bool_iperf = iperf
self.format = 'M'
def trans_tcp(self, dir_path, f_name, win_size, algo, duration):
if self.bool_iperf:
self.tcp_iperf(dir_path, f_name, win_size, algo, duration)
else:
self.tcp_iperf3(dir_path, f_name, win_size, algo, duration)
def tcp_iperf(self, dir_path, f_name, win_size, algo, duration, suffix='.txt'):
file = os.path.join(dir_path, f_name + suffix)
cmd = 'sudo iperf -c {} -p {} -w {} -f {} -i 1 -Z {} -t {} >> {}'.format(self.server_ip,
self.server_port, win_size,
self.format,
algo, duration, file)
os.system(cmd)
def tcp_iperf3(self, dir_path, f_name, win_size, algo, duration, suffix='.txt'):
file = os.path.join(dir_path, f_name + suffix)
cmd = 'sudo iperf3 -c {} -p {} -w {} -f {} -i 1 -C {} -t {} --logfile {}'.format(self.server_ip,
self.server_port, win_size,
self.format,
algo, duration, file)
os.system(cmd)