From 9f435e1824145d4834563f0b92e3e53b61306b4b Mon Sep 17 00:00:00 2001 From: Felix Date: Tue, 22 Oct 2019 07:17:14 +0100 Subject: [PATCH] El precompiler esta avanzado, ahora solo con crear el archivo data con el lenguaje vsorc se puede arrancar la topologia --- cleaner.sh | 0 clusterGRE.py | 7 ++++--- precompiler.py | 52 +++++++++++++++++++++++++++++++++++++++++++------- topotest.py | 3 +-- 4 files changed, 50 insertions(+), 12 deletions(-) mode change 100644 => 100755 cleaner.sh mode change 100644 => 100755 precompiler.py diff --git a/cleaner.sh b/cleaner.sh old mode 100644 new mode 100755 diff --git a/clusterGRE.py b/clusterGRE.py index f14e140..56b2a95 100755 --- a/clusterGRE.py +++ b/clusterGRE.py @@ -6,7 +6,8 @@ from mininet.log import setLogLevel from mininet.examples.clustercli import ClusterCLI as CLI from mininet.node import RemoteController from topotest import MiTopo - +from precompiler import TopoFromCompiler + def inicia(): #IPs = '/home/pi/iplist' c = RemoteController('c1', ip='192.168.25.10', port=6633) @@ -14,8 +15,8 @@ def inicia(): servers = ['192.168.25.2', '192.168.25.3', '192.168.25.4','192.168.25.5','192.168.25.6'] topo1 = TreeTopo(depth=2, fanout=2) topo2 = MiTopo() - #topo2.build() - net = MininetCluster(topo=topo2, servers=servers, link=RemoteGRELink, placement=SwitchBinPlacer, controller=c) + topo3 = TopoFromCompiler() + net = MininetCluster(topo=topo3, servers=servers, link=RemoteGRELink, placement=SwitchBinPlacer, controller=c) net.start() CLI(net) net.stop() diff --git a/precompiler.py b/precompiler.py old mode 100644 new mode 100755 index 2e2cf56..86bd4d4 --- a/precompiler.py +++ b/precompiler.py @@ -1,26 +1,64 @@ -#!/usr/bin/env python3 +#!/usr/bin/python import sys import os import time -cmd = './cleaner.sh '+sys.argv[1] -os.system(cmd) +from mininet.topo import Topo +from mininet.log import setLogLevel, info + +""" +Este precompilador transforma el lenguaje VSORC a la API de topologias de +Mininet +""" +links = [] +devices = [] +hosts = [] +switches = [] +#Lists + +#cmd = './cleaner.sh '+sys.argv[1] +cmd2 = './cleaner.sh data' +os.system(cmd2) time.sleep(.300) -document = open(sys.argv[1] + "_clean" ,"r+") +#document = open(sys.argv[1] + "_clean" ,"r+") +document = open("data" + "_clean" ,"r+") links = document.readlines() document.close + #clean the \n in the colected data a = 0 for linkline in links: links[a] = linkline.rstrip() a+=1 + # get a list of non repeating devices -devices = [] for value in links: value_split = value.split(':') devices.append(value_split[0]) devices.append(value_split[1]) devices = list(dict.fromkeys(devices)) -print devices -print links + + +class TopoFromCompiler(Topo): +#This class is for create the custom topology from the data collected. +#Here we also process the data to make the topo + def build(self): + for device in devices: + if device.startswith("h"): + host = device + host = self.addHost(host) #Create a host with the data collected from the list + hosts.append(host) + + elif device.startswith("s"): + switch = device + switch = self.addSwitch(switch) #Create a switch + switches.append(switch) + + print ("Devices: " + str(devices) + "\n" + "Links: " + str(links) + "\n" + "Hosts: " + str(hosts) + "\n" + "Switches: " + str(switches) + "\n") + + #Create links + for pair in links: + split = pair.split(":") + self.addLink(split[0],split[1]) + diff --git a/topotest.py b/topotest.py index 9061296..022207c 100755 --- a/topotest.py +++ b/topotest.py @@ -29,7 +29,6 @@ class MiTopo(Topo): h7 = self.addHost('h7') h9 = self.addHost('h9') - self.addLink(h1, s2) self.addLink(h9, s4) self.addLink(h2, s2) @@ -42,7 +41,7 @@ class MiTopo(Topo): self.addLink(h6, s3) self.addLink(h7, s4) self.addLink(h8, s4) - info('llegue al final de mitopo\n') + #info('llegue al final de mitopo\n') #topos = { 'TopoMia': ( lambda: MiTopo() ) } -- 2.25.1