CPqD / ofsoftswitch13

OpenFlow 1.3 switch.
http://cpqd.github.com/ofsoftswitch13
304 stars 192 forks source link

Cannot create queues with CPqD #222

Closed vdanchev closed 6 years ago

vdanchev commented 8 years ago

Hi,

I am experiencing some issues while running CPqD in Mininet. First, I had a permissions issue when trying to add a queue. Removed the "--no-slicing" argument from mininet as suggested, and ran make install. Unfortunately, now it seems that the datapath cannot be established. When running:

mn --topo single,2 --switch user, --controller remote

The topology is created, but no unix socket file is created. I only see log entries: root@mininet-vm:/tmp# cat s1-ofd.log RTNETLINK answers: No such file or directory May 31 00:57:01|00001|netdev|WARN|Problem configuring qdisc for device s1-eth1 May 31 00:57:01|00002|dp_ports|ERR|failed to configure slicing on s1-eth1 device: check INSTALL for dependencies, or rerun using --no-slicing option to disable slicing ofdatapath: failed to add port s1-eth1 (Unknown error 512)

Is it possible to actually use queues or I am missing some dependencies (and which ones, if that is the case) ? Also, is it possible to use queues on the CPqD switch along with link bandwidth limiting using TCLink in Mininet?

Regards, VD

cedric-1 commented 8 years ago

Hi,

I had the same problem : when suppressed the --no-slicing argument my mininet network stopped working. I don't know the reasons that cause this behaviour, but I solved it by creating a custom topology with more parameters in links and nodes definition, and with --link tc option enabled.

This is my topology :

h1 ---            
       \   1M   
h2 ---- s1 --- s2 ---- h4
      /         
h3 ---   
#!/usr/bin/python

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import Controller, RemoteController
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.util import dumpNodeConnections

class MyTopo( Topo ):

    def __init__( self ):

        # Initialize topology
        Topo.__init__( self )

        # Add hosts and switches
        h1 = self.addHost( 'h1', ip='10.0.0.1', mac='00:00:00:00:00:01' )
        h2 = self.addHost( 'h2', ip='10.0.0.2', mac='00:00:00:00:00:02' )
        h3 = self.addHost( 'h3', ip='10.0.0.3', mac='00:00:00:00:00:03' )
        h4 = self.addHost( 'h4', ip='10.0.0.4', mac='00:00:00:00:00:04' )
        s1 = self.addSwitch( 's1' )
        s2 = self.addSwitch( 's2' )

        # Add links
        '''  
            OPT 1 : with -tc
            self.addLink( A, B, bw = N, bw = N, use_htb=True/False, max_queue_size = N)
            The parameter bw is expressed as a number in Mbit; 
            delay is expressed as a string with units in place (e.g. '5ms', '100us', '1s'); 
            loss is expressed as a percentage (between 0 and 100); 
            max_queue_size is expressed in packets.
            source : https://github.com/mininet/mininet/wiki/Introduction-to-Mininet
        '''

        self.addLink( h1, s1, use_htb=True, max_queue_size = 1 )
        self.addLink( h2, s1, use_htb=True, max_queue_size = 1 )
        self.addLink( h3, s1, use_htb=True, max_queue_size = 1 )
        self.addLink( s1, s2, bw = 1, use_htb=True, max_queue_size = None)
        self.addLink( s2, h4, use_htb=True, max_queue_size = 1 )

topos = { 'mytopo': ( lambda: MyTopo() ) }

to launch the topology : sudo mn --custom ~/mininet/custom/topo.py --topo mytopo --switch user,protocols=OpenFlow13, --link tc

If you add some rules to the switches it should ping, and the bandwidth between s1 and s2 will be limited to 1 mbps.

Unfortunatly I don't manage to make queues working with this solution.

I hope it will help you, before getting a better answer.

ederlf commented 6 years ago

7075dec54d877b497de50b78d230ffee6c14474d should finally fix it now.