I cheated controllers={'c%i' % domaine: self.addController('c%i' % domaine)
for domaine in C}
not
controllers={'c%i' % domaine: self.addHost('h%i' % domaine) for domaine in C}
On Tuesday, January 8, 2019, 1:15:52 PM GMT+1, Imen Souidene via Ryu-devel
<[email protected]> wrote:
Hi, I tried to add 3 ryu controllers for differents names.
1- Execute 3 controllers :The customized module is written in: VICN.py (6633)
/ VICN1.py (6634) and VICN2.py (6636)
I opened 3 terminals to start 3 ryucontrollers:
sudo ryu-manager --ofp-tcp-listen-port VICN.py ryu.app.ofctl_rest
--observe-links
sudo ryu-manager --ofp-tcp-listen-port VICN1.py ryu.app.ofctl_rest
--observe-links
sudo ryu-manager --ofp-tcp-listen-port VICN2.py ryu.app.ofctl_rest
--observe-links
2- Execute mininet (the customized topology is determind in VICN.py)
-sudo mn --custom topology.py --controller=remote
--switch=ovsk,protocols=OpenFlow14 --topo mytopo --mac --arp
--link=tc,bw=1,delay=10ms
But the problem that the three controllers are displayed with the same name C0
, despite each of the controllers running.
topology.py :
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.log import setLogLevel
from mininet.node import OVSSwitch, RemoteController
from mininet.link import TCLink , CLI
class ICNSDNTopology(Topo):
"Simple topology example."
def __init__(self):
"Create custom topo."
# Initialize topology
Topo.__init__(self)
H = [1, 2, 3,4,6,8]
S = [1, 2, 3,4,5,6,7,8,9]
P = [44,66,88] C = [0,1,2]
S = xrange(1, 10)
switches = {'s%i' % domaine: self.addSwitch('s%i' % domaine) for
domaine in S}
hosts = {'h%i' % domaine: self.addHost('h%i' % domaine) for domaine in
H}
publishers = {'h%i' % domaine: self.addHost('h%i' % domaine) for
domaine in P}
controllers={'c%i' % domaine: self.addHost('h%i' % domaine) for domaine
in C}
# Merge(combine) switches and hosts
nodes = {}
nodes.update(switches)
nodes.update(hosts)
nodes.update(publishers)
# Add a host service for each switch
host_services = {'sh%i' % domaine: self.addHost('sh%i' % domaine) for
domaine in H}
nodes.update(host_services)
links = [('s1','s2'), ('s2','s3'),('s3', 's4'), ('s4', 's5'), ('s3',
's5'),('s6','s7'),
('s7','s8'),
('s1','s8'),('s8','s9'),('s9','s5'),('s3','s9'),('s2','s8'),
('h2','s2'),('h1','s1'),('h4','s4'),('h6','s6'),('h8','s8'),('h3','s3'),
('h44','s4'),('h66','s6'),('h88','s8')] # ('s5', 's6'),
for link in links:
self.addLink(nodes[link[0]], nodes[link[1]],bw=100, delay='10ms')
# Add link between each switch and its corresponding service host
for domaine in H:
self.addLink(nodes['s%i' % domaine], host_services['sh%i' %
domaine], 100,100,bw=100,delay='1ms')
self.addLink(nodes['s%i' % domaine], host_services['sh%i' %
domaine], 101,101,bw=100,delay='1ms')
self.publishers = {'sh4','sh6'}
topos = {'mytopo': (lambda: ICNSDNTopology())}
def runExperiment(hosts,publishers):
"Create and test a simple experiment"
topo_icn = ICNSDNTopology() //Topology//
net = Mininet(switch=OVSSwitch(protocols="OpenFlow14"), topo=topo_icn)
controllers = []
controllers = []
c0 = RemoteController('c0', '10.0.20.3', 6633)
c1 = RemoteController('c1', '10.1.2.1', 6634)
c2 = RemoteController('c2', '10.128.3.1', 6635)
controllers.append(c0)
controllers.append(c1)
controllers.append(c2)
net.addController(c0)
net.addController(c1)
net.addController(c2)
for domain in range(0, 3):
switches[domain * 3 + 0].start([controllers[domain]])
switches[domain * 3 + 1].start([controllers[domain]])
switches[domain * 3 + 2].start([controllers[domain]])
switches[domain * 3 + 3].start([controllers[domain]])
net.build() c0.start()
c1.start()
c2.start()
CLI(net)
net.stop()
----------------------------------------------
VICN.py :
from __future__ import print_function
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
from ryu.controller.handler import set_ev_cls
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet, ipv4, mpls
from ryu.lib.packet import ether_types
from ryu.topology import event
from ryu.topology.api import get_switch, get_link
import networkx as nx
import os
import re
from registration import Registration
from ryu.ofproto import ofproto_v1_4
import threading
import time
class ICSDNController(app_manager.RyuApp):
OFP_VERSIONS = [ofproto_v1_4.OFP_VERSION]
def __init__(self, *args, **kwargs):
super(ICSDNController, self).__init__(*args, **kwargs)
//Topology//
self.switches = []
self.links = []
self.mac_to_port = {}
self.topology_api_app = self
self.net = nx.DiGraph() # Directional graph to set output_port
self.INTEREST_PROTOCOL = 150
self.DATA_PROTOCOL = 151
self.REGISTER_PROTOCOL = 152
self.HELLO_LABEL = 932620
f = os.system('ifconfig > ifconfig')
f = open('ifconfig', 'r+').read()
# f = open('/proc/net/arp', 'r').read()sc
mac_regex = re.compile("(?:[0-9a-fA-F]:?){12}")
self.CONTROLLER_ETH = mac_regex.findall(f)[0]
Please, how can I solve it?
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel