forked from keithw/datagrump
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun-trial.py
executable file
·163 lines (134 loc) · 5.32 KB
/
run-trial.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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import Host
from mininet.link import Link
from mininet.cli import CLI
from mininet.util import dumpNodeConnections
from mininet.util import ensureRoot
from subprocess import Popen, PIPE
from time import sleep, time
import sys
import os
import math
import requests
ensureRoot()
class ProtoTester(Topo):
def __init__(self):
# Initialise topology
Topo.__init__(self)
# Add hosts and switches
sender = self.addHost('sender', ip='10.0.1.1', mac='00:00:00:00:00:01')
LTE = self.addHost('LTE', ip='0.0.0.0')
receiver = self.addHost('receiver', ip='10.0.1.2', mac='00:00:00:00:00:02')
s1 = self.addSwitch('s1')
s2 = self.addSwitch('s2')
# Add links
self.addLink(sender, s1)
self.addLink(s1, LTE)
self.addLink(LTE, s2)
self.addLink(s2, receiver)
def set_all_IP(net, sender, LTE, receiver):
sender.sendCmd('ifconfig sender-eth0 10.0.1.1 netmask 255.255.255.0')
sender.waitOutput()
LTE.sendCmd('ifconfig LTE-eth0 up')
LTE.waitOutput()
LTE.sendCmd('ifconfig LTE-eth1 up')
LTE.waitOutput()
receiver.sendCmd('ifconfig receiver-eth0 10.0.1.2 netmask 255.255.255.0')
receiver.waitOutput()
sender.sendCmd('echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6')
sender.waitOutput()
LTE.sendCmd('echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6')
LTE.waitOutput()
receiver.sendCmd('echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6')
receiver.waitOutput()
def display_routes(net, sender, LTE, receiver):
print 'sender route...'
sender.sendCmd('route -n')
print sender.waitOutput()
print 'LTE route...'
LTE.sendCmd('route -n')
print LTE.waitOutput()
print 'receiver route...'
receiver.sendCmd('route -n')
print receiver.waitOutput()
def run_cellsim(LTE):
LTE.sendCmd('/home/ubuntu/multisend/sender/cellsim-setup.sh LTE-eth0 LTE-eth1')
LTE.waitOutput()
print "Running cellsim (this will take a few minutes)..."
LTE.sendCmd('/home/ubuntu/multisend/sender/cellsim-runner.sh')
LTE.waitOutput()
print "done."
def run_datagrump(sender, receiver):
print "Running datagrump-receiver...",
receiver.sendCmd('/home/ubuntu/datagrump/datagrump-receiver 9000 >/tmp/receiver-stdout 2>/tmp/receiver-stderr &')
receiver.waitOutput()
print "done."
print "Setting environment variables"
for var in ['ALPHA','BETA','GAMMA','DELTA']:
#print var, os.environ.get(var)
command = 'export %s=%s'%(var,os.environ.get(var))
#print command
sender.sendCmd(command)
sender.waitOutput()
print "Running datagrump-sender...",
sender.sendCmd('/home/ubuntu/datagrump/datagrump-sender 10.0.1.2 9000 debug >/tmp/sender-stdout 2>/tmp/sender-stderr &')
sender.waitOutput()
print "done."
def print_welcome_message():
print "Running trial without display"
return
print "####################################################################"
print "# #"
print "# 6.829 PS 2 Emulated Network Test #"
print "# #"
print "# running sender <=> cellsim <=> receiver #"
print "# #"
print "# Debug output in /tmp/{sender,receiver,cellsim}-{stdout,stderr} #"
print "# #"
print "####################################################################"
print
def run_cellsim_topology():
print_welcome_message()
os.system( "killall -q controller" )
os.system( "killall -q cellsim" )
os.system( "killall -q datagrump-sender" )
os.system( "killall -q datagrump-receiver" )
topo = ProtoTester()
net = Mininet(topo=topo, host=Host, link=Link)
net.start()
sender = net.getNodeByName('sender')
LTE = net.getNodeByName('LTE')
receiver = net.getNodeByName('receiver')
set_all_IP(net, sender, LTE, receiver)
#Dump connections
#dumpNodeConnections(net.hosts)
#display_routes(net, sender, LTE, receiver)
run_datagrump(sender, receiver)
run_cellsim(LTE)
# CLI(net)
net.stop()
def upload_data( username ):
print "Uploading data to server...",
os.system( 'gzip --stdout /tmp/cellsim-stdout > /tmp/to-upload.gz' )
reply = requests.post( 'http://6829.keithw.org/cgi-bin/6829/upload-data',
files={'contents': (username, open( '/tmp/to-upload.gz',
'rb' ))} )
print "done. Got reply:"
print
print reply.text
output = open('output.txt','a')
log_message = "%s %s %s %s "%(os.environ.get('ALPHA'),os.environ.get('BETA'),os.environ.get('GAMMA'),os.environ.get('DELTA'))
print log_message
output.write(log_message)
for line in reply.text.split("\n"):
if "http" in line:
output.write(line.strip() + "\n")
output.close()
if __name__ == '__main__':
if len(sys.argv) != 2:
print "Usage: sudo %s [username]" % sys.argv[ 0 ]
else:
run_cellsim_topology()
upload_data( sys.argv[ 1 ] )