Как построить топологию с помощью networkX в мининете?

Я построил простую топологию сети, используя скрипт mininet python. Однако я хочу расширить этот код, используя networkX для построения топологии в скрипте mininet. Таким образом, во-первых, я должен импортировать networx как nx. Причина использования networkX заключается в том, чтобы очень легко и просто найти кратчайший путь между любым исходным и целевым хостами.

Код топологии:

#!/usr/bin/env python
from mininet.net import Mininet  # IMPORT Mininet
from mininet.cli import CLI       ## IMPORT COMMAND LINE 
from mininet.link import  TCLink
from mininet.log import setLogLevel        # FOR DEPUG
from mininet.node import RemoteController  # TO BE ABLE O ADD REMOTE CONTROLLER

net = Mininet(link=TCLink)

# ADDING hosts with given MAC
h1 = net.addHost("h1",mac='00:00:00:00:00:01')
h2 = net.addHost("h2",mac='00:00:00:00:00:02')
h3 = net.addHost("h3",mac='00:00:00:00:00:03')

# ADDING Switch
s1 = net.addSwitch("s1")

net.addLink(h1,s1,bw=10, delay='5ms' )
net.addLink(h2,s1,bw=10, delay='5ms' )
net.addLink(h3,s1,bw=10, delay='5ms' )

# ADDING COTROLLER    
net.addController("c0",controller=RemoteController,ip="127.0.0.1",port=6633)

# START Mininet       
net.start()

CLI(net)
net.stop() 

 # EXIT Miminet

Кто-нибудь из вас может помочь мне изменить и соединить networkX с mininet при построении топологии?

Ваша помощь приветствуется.


person Layally    schedule 10.11.2019    source источник
comment
вы смогли найти решение?   -  person Tabz    schedule 16.03.2020


Ответы (1)


Для тех, кому это еще интересно:

Networkx — отличная библиотека для построения сетей, в ней есть множество очень полезных предустановленных функций. Я сделал то же самое для своей диссертации, у меня был networkx-граф, который я использовал для упрощения некоторых вычислений, и программно построил топологию минисети с networkx-графом в качестве модели. К счастью, это очень легко сделать, и нужно всего лишь пройтись по узлам и ребрам networkx. Раньше в списке рассылки Mininet была ссылка на такой фрагмент кода, но я видел, что сейчас он мертв. Не стесняйтесь использовать вместо этого мой код:

from mininet.net import Mininet
import networkx as nx

def construct_mininet_from_networkx(graph, host_range):
    """ Builds the mininet from a networkx graph.

    :param graph: The networkx graph describing the network
    :param host_range: All switch indices on which to attach a single host as integers
    :return: net: the constructed 'Mininet' object
    """

    net = Mininet()
    # Construct mininet
    for n in graph.nodes:
        net.addSwitch("s_%s" % n)
        # Add single host on designated switches
        if int(n) in host_range:
            net.addHost("h%s" % n)
            # directly add the link between hosts and their gateways
            net.addLink("s_%s" % n, "h%s" % n)
    # Connect your switches to each other as defined in networkx graph
    for (n1, n2) in graph.edges:
        net.addLink('s_%s' % n1,'s_%s' % n2)
    return net

Я старался как можно больше навести порядок в своем коде. Это должен быть хороший скелет, на котором можно строить. Это предполагает, что граф networkx содержит только чистую сетевую топологию. Хосты, подключающиеся к этому, добавляются через параметр host_range, который в моем случае содержал индексы коммутаторов (соответствующих номеру узла в графе networkx), которые я хотел подключить к хостам. Добавьте все, что вам нужно, например, более одного хоста на коммутатор, соединяющий хост, определенные параметры полосы пропускания и задержки для каналов, MAC-адреса, контроллер...

person Cerenia    schedule 16.04.2020
comment
Могу ли я реализовать какие-либо huersitic алгоритмы в NetworkX, чтобы найти оптимальное решение @Cerenia - person Ba. Taj; 28.09.2020
comment
Что именно вы пытаетесь вычислить? NetworkX — это библиотека, в которой уже есть куча алгоритмов. Например, вы можете найти готовый алгоритм кратчайшего пути Дейкстры: networkx.github.io/documentation/stable/reference/algorithms/ Посмотрите документы, чтобы узнать, что еще там есть. - person Cerenia; 30.09.2020
comment
Мне нужно внедрить алгоритмы PSO, BAT в networkx @Cerenia - person Ba. Taj; 01.10.2020