Mininet OVSswitch Mesh

Я использую мининет для моделирования сети. Я использую Python 2.7.6 и mininet 2.3 внутри Ubuntu 14.04.6 LTS VirtualBox. У меня создана топология, которая работает, но она не работает так, как мне бы хотелось. Топология не выглядит эффективной или правильной с точки зрения того, почему должна создаваться топология. Тем не менее, именно так я и хочу его создать. Ссылка ниже будет содержать топологию сети. У меня все узлы подключены.

Схема топологии

Я пытаюсь заставить узлы h2, h4 и h6 связываться друг с другом через сетку коммутатора (s5,s6,s7). У меня есть статические маршруты, настроенные на каждом из маршрутизаторов, который откладывает маршруты пакетов вокруг основания до Ethernet, а затем выполняет резервное копирование. У меня практически нет опыта работы с контроллерами, и я искал, как создать сетку из переключателей OVSS. Я видел, может быть, 2 примера. После неудачных попыток реализовать его, я здесь, чтобы посмотреть, что может предложить сообщество. Ссылки, которые я пытался реализовать, приведены ниже.

http://dannykim.me/danny/openflow/73682

http://dannykim.me/danny/openflow/73711

Я подтвердил, что между коммутаторами добавлены ссылки. Я перевел коммутаторы в режим моста и включил STP. Я настроил ifconfig ip для каждого из коммутаторов. Их ip 10.0.10.(1,2,3) соответственно S(5,6,7). Я выполнил трассировку от h2 до h6, чтобы показать, что маршруты не проходят через коммутаторы.

Трассировка от h2 до h6

Причина, по которой я здесь, состоит в том, чтобы спросить, где и как мне включить контроллер для настройки маршрутизации через коммутаторы? Как контроллер скажет, например, h2 направиться к h6 через сетку коммутатора. Я попытался подключить контроллер к h1, так как это будет базовая станция для сети, где h1 потерял все подключения к остальной части сети. На данный момент, я чувствую, что возлюсь, возможно, повезет. Любой совет или информация будут очень полезны. Исходный код будет связан с нижней частью.

Спасибо,

Cybronicle


#!/usr/bin/env python2

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.link import Link, TCLink, TCIntf
from mininet.log import setLogLevel, info
from mininet.cli import CLI
from mininet.node import Node, CPULimitedHost, RemoteController, OVSSwitch
from mininet.util import dumpNodeConnections, pmonitor
from mininet.nodelib import LinuxBridge
import time, sys, os
import csv, threading
import netTests
import subprocess


PACKET_SIZE_BITS = 1500 * 8

class LinuxRouter(Node):
 """a node with IP-forwarding"""

 #function to configure ipv4 forwarding
 def config(self, **params):
  super(LinuxRouter, self).config(**params)
  self.cmd('sysctl net.ipv4.ip_forward=1')
  self.cmd('sysctl net.ipv4.conf.all.rp_filter=0')

 #function to close the router
 def terminate(self):
  self.cmd('sysctl net.ipv4.ip_forward=0')
  print("test clear")
  self.cmd('sudo mn -c')
  super(LinuxRouter, self).terminate()

class testTopop(Topo):
    #function to start topology building
    def build(self, **opts):

        '''switch'''
        s1 = self.addSwitch('s1')

        '''router'''
        r1 = self.addNode('r1', cls=LinuxRouter, ip='192.168.1.1/24')
        self.addLink(s1, r1, intfName2='r1-eth1', params2={'ip': '192.168.1.1/24'}) 

        '''host'''
        h1 = self.addHost('h1', ip='192.168.1.2/24')
        self.addLink(s1,h1, params2={'ip':'192.168.1.2/24'})


        '''bridge'''
        s2 = self.addSwitch('s2', cls=LinuxBridge)
        s3 = self.addSwitch('s3', cls=OVSSwitch)

        '''router'''
        r2 = self.addNode('r2', cls=LinuxRouter, ip='192.168.2.1/24')
        self.addLink(s2, r2, intfName2='r2-eth1', params2={'ip': '192.168.2.1/24'})

        '''hosts'''        
        h2 = self.addHost('h2', ip='192.168.2.2/24', defaultRoute='via 192.168.2.1/24')
        self.addLink(s2,h2, params2={'ip':'192.168.2.2/24'}) 
        self.addLink(s3,h2, params2={'ip':'192.168.2.2/24'})

        '''Bridge'''
        s4 = self.addSwitch('s4', cls=LinuxBridge)
        s5 = self.addSwitch('s5', cls=OVSSwitch)
        self.addLink(s3,s5)

        '''routers'''
        r4 = self.addNode('r4', cls=LinuxRouter, ip='192.168.7.1/24')
        self.addLink(s4, r4, intfName2='r4-eth1', params2={'ip': '192.168.7.1/24'})

        h4 = self.addHost('h4', ip='192.168.7.2/24', defaultRoute='via 192.168.7.1/24')
        self.addLink(s4,h4, params2={'ip':'192.168.7.2/24'})
        self.addLink(s5,h4, params2={'ip':'192.168.7.2/24'})


        '''Bridge'''
        s6 = self.addSwitch('s6', cls=LinuxBridge)

        s7 = self.addSwitch('s7', cls=OVSSwitch)
        self.addLink(s3,s7)
        self.addLink(s5,s7)

        '''routers'''
        r6 = self.addNode('r6', cls=LinuxRouter, ip='192.168.11.1/24')
        self.addLink(s6, r6, intfName2='r6-eth1', params2={'ip': '192.168.11.1/24'})


        h6 = self.addHost('h6', ip='192.168.11.2/24', defaultRoute='via 192.168.11.1/24')
        self.addLink(s6,h6, params2={'ip':'192.168.11.2/24'})
        self.addLink(s7,h6, params2={'ip':'192.168.11.2/24'})


    #called to create router link
        self.define_router_links(r1,r2,r4,r6)

 #function to setup router links
    def define_router_links(self,r1,r2,r4,r6):


        self.addLink(r1, r2, cls1=TCIntf, cls2=TCIntf, intfName1='r1-eth2',  params1={'ip': '10.0.0.1/24'},
                                                       intfName2='r2-eth2',  params2={'ip': '10.0.0.2/24'})

        self.addLink(r1, r4, cls1=TCIntf, cls2=TCIntf, intfName1='r1-eth3',  params1={'ip': '10.0.3.1/24'},
                                                       intfName2='r4-eth2',  params2={'ip': '10.0.3.2/24'})

        self.addLink(r1, r6, cls1=TCIntf, cls2=TCIntf, intfName1='r1-eth4',  params1={'ip': '10.0.5.1/24'},
                                                       intfName2='r6-eth2',  params2={'ip': '10.0.5.2/24'})

def run():

 time.sleep(2)
 #sets object to the test topology
 topol = testTopop()  
 #loads topology into mininet and runs
 net = Mininet(topo=topol)

 net.start()

 print('\n\nBeginning network simulation \n\n')

 net['s3'].cmd('ifconfig s3 10.0.10.1')
 net['s5'].cmd('ifconfig s3 10.0.10.2')
 net['s7'].cmd('ifconfig s3 10.0.10.3')

 net['s3'].cmd('ovs-vsctl set bridge s3 stp-enable=true')
 net['s5'].cmd('ovs-vsctl set bridge s5 stp-enable=true')
 net['s7'].cmd('ovs-vsctl set bridge s7 stp-enable=true')

 net['h1'].cmd('route add default gw 192.168.1.1') 

 net['r1'].cmd('route add -net 192.168.2.0 netmask 255.255.255.0 gw 10.0.0.2') # connects to r2's network
 net['r1'].cmd('route add -host 192.168.2.2 netmask 255.255.255.0 gw 10.0.0.2') # connects r1 to h2
 net['r1'].cmd('route add -net 192.168.7.0 netmask 255.255.255.0 gw 10.0.3.2') # connects r1 to r4 network
 net['r1'].cmd('route add -host 192.168.7.2 netmask 255.255.255.0 gw 10.0.3.2') # direct connect to h4
 net['r1'].cmd('route add -net 192.168.11.0 netmask 255.255.255.0 gw 10.0.5.2')  # connects r1 to r6
 net['r1'].cmd('route add -host 192.168.11.2 netmask 255.255.255.0 gw 10.0.5.2') # direct connect to h6

 net['h2'].cmd('route add default gw 192.168.2.1') 
 net['r2'].cmd('route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.0.1') # connects to r1's network
 net['r2'].cmd('route add -host 192.168.2.2 dev r2-eth1') 

 net['r2'].cmd('route add -net 10.0.3.0 netmask 255.255.255.0 gw 10.0.0.1')
 net['r2'].cmd('route add -net 192.168.7.0 netmask 255.255.255.0 gw 10.0.0.1')
 net['r2'].cmd('route add -host 192.168.7.1 gw 10.0.0.1') 
 net['r2'].cmd('route add -net 10.0.5.0 netmask 255.255.255.0 gw 10.0.0.1')
 net['r2'].cmd('route add -net 192.168.11.0 netmask 255.255.255.0 gw 10.0.0.1')
 net['r2'].cmd('route add -host 192.168.11.1 gw 10.0.0.1')


 net['h4'].cmd('route add default gw 192.168.7.1') 

 net['r4'].cmd('route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.3.1') # connects to r3's network
 net['r4'].cmd('route add -host 192.168.7.2 dev r4-eth1')

 net['r4'].cmd('route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.3.1')
 net['r4'].cmd('route add -net 192.168.2.0 netmask 255.255.255.0 gw 10.0.3.1')
 net['r4'].cmd('route add -host 192.168.2.1 gw 10.0.3.1 ')
 net['r4'].cmd('route add -net 10.0.5.0 netmask 255.255.255.0 gw 10.0.3.1')
 net['r4'].cmd('route add -net 192.168.11.0 netmask 255.255.255.0 gw 10.0.3.1')
 net['r4'].cmd('route add -host 192.168.11.1 gw 10.0.3.1')


 net['h6'].cmd('route add default gw 192.168.11.1') 

 net['r6'].cmd('route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.5.1') # connects to r3's network
 net['r6'].cmd('route add -host 192.168.11.2 dev r6-eth1')

 net['r6'].cmd('route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.5.1')
 net['r6'].cmd('route add -net 192.168.2.0 netmask 255.255.255.0 gw 10.0.5.1')
 net['r6'].cmd('route add -host 192.168.2.1 gw 10.0.5.1 ')
 net['r6'].cmd('route add -net 10.0.3.0 netmask 255.255.255.0 gw 10.0.5.1')
 net['r6'].cmd('route add -net 192.168.7.0 netmask 255.255.255.0 gw 10.0.5.1')
 net['r6'].cmd('route add -host 192.168.7.1 gw 10.0.5.1')

 print(net['h2'].cmd('traceroute 192.168.11.2'))


 time.sleep(1)
 net.pingAll()
 time.sleep(1)




if __name__ == '__main__':
 #runs program from start
   try:
     run()
   except Exception as e:
    print(e.message)
    exc_type, exc_obj, exc_tb = sys.exc_info()
    fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
    print(exc_type, fname, exc_tb.tb_lineno)

    print("Process failed... cleaning up")
    subprocess.call(["mn", "-c"], stdout=open(os.devnull, 'w'), stderr=subprocess.STDOUT)

   print('program ends')

0 ответов

Другие вопросы по тегам