|
|
|
from mininet.net import Mininet
|
|
|
|
from mininet.node import Controller
|
|
|
|
from mininet.log import setLogLevel
|
|
|
|
from mininet.cli import CLI
|
|
|
|
from pox.lib import of
|
|
|
|
import time
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
|
|
# Create empty lists to store the timestamp and latency values
|
|
|
|
timestamps = []
|
|
|
|
latencies = []
|
|
|
|
|
|
|
|
class PacketCopyController(Controller):
|
|
|
|
def __init__(self, name, target_host, **kwargs):
|
|
|
|
Controller.__init__(self, name, **kwargs)
|
|
|
|
self.target_host = target_host
|
|
|
|
|
|
|
|
def _handle_PacketIn(self, event):
|
|
|
|
packet = event.parsed
|
|
|
|
self.packet_out(event.port, packet)
|
|
|
|
self.packet_out_to_host(packet)
|
|
|
|
# Measure latency and store timestamp and latency values
|
|
|
|
latency = time.time() - event.created
|
|
|
|
timestamps.append(time.time())
|
|
|
|
latencies.append(latency)
|
|
|
|
|
|
|
|
def packet_out(self, out_port, packet):
|
|
|
|
msg = of.ofp_packet_out()
|
|
|
|
msg.data = packet.pack()
|
|
|
|
action = of.ofp_action_output(port=out_port)
|
|
|
|
msg.actions.append(action)
|
|
|
|
self.connection.send(msg)
|
|
|
|
|
|
|
|
def packet_out_to_host(self, packet):
|
|
|
|
host = self.net.get(self.target_host)
|
|
|
|
if host:
|
|
|
|
host.sendMsg(packet)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
setLogLevel('info')
|
|
|
|
|
|
|
|
# Creazione della rete Mininet
|
|
|
|
net = Mininet(controller=PacketCopyController)
|
|
|
|
|
|
|
|
# Creazione degli host e degli switch
|
|
|
|
h1 = net.addHost('h1')
|
|
|
|
h2 = net.addHost('h2')
|
|
|
|
h3 = net.addHost('h3')
|
|
|
|
s1 = net.addSwitch('s1')
|
|
|
|
|
|
|
|
# Creazione dei collegamenti
|
|
|
|
net.addLink(h1, s1)
|
|
|
|
net.addLink(h2, s1)
|
|
|
|
net.addLink(h3, s1)
|
|
|
|
|
|
|
|
# Create the plot
|
|
|
|
plt.figure()
|
|
|
|
plt.xlabel('Time')
|
|
|
|
plt.ylabel('Latency (seconds)')
|
|
|
|
plt.title('Network Latency')
|
|
|
|
|
|
|
|
# Avvio della rete e assegnazione del controller
|
|
|
|
# Add the POX controller
|
|
|
|
controller = net.addController(name='controller', target_host='h3', controller=PacketCopyController, ip='127.0.0.1', port=6633)
|
|
|
|
net.start()
|
|
|
|
controller.start()
|
|
|
|
# controller = net.controllers[0]
|
|
|
|
# controller.net = net
|
|
|
|
|
|
|
|
# Start the plot animation
|
|
|
|
plt.ion()
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
try:
|
|
|
|
while True:
|
|
|
|
# Update the plot with new latency data
|
|
|
|
plt.plot(timestamps, latencies, 'b-')
|
|
|
|
plt.draw()
|
|
|
|
plt.pause(0.1)
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
pass
|
|
|
|
|
|
|
|
CLI(net)
|
|
|
|
net.stop()
|