我试图通过mininet将队列(绑定到端口)添加到模拟网络环境的多个交换机。 使用的交换机实现是ofsoftswitch13
启动mininet的命令:
sudo mn --custom mininet-mesh-topology.py --topo test --controller remote,ip=192.168.56.1,port=6653 --switch=user,protocols=OpenFlow13 --link tc
当我尝试使用时:
sudo dpctl unix:/tmp/s1 queue-mod 1 1 10
它返回:
SENDING (xid=0xF0FF00F0):
expmodqueue{port="1", queue={q="1", props=[minrate{rate="10"}]}}
RECEIVED (xid=0xF0FF00F0):
error{type="QUEUE_OP_FAILED", code="EPERM", dlen="56"}
错误消息表明可能存在权限错误, 但我不知道如何解决这个问题。 流插入/修改按预期工作,无论是由dpctl还是sdn控制器完成。
有人可以帮忙吗?
答案 0 :(得分:0)
我现在设法解决我自己的问题。 对于那些感兴趣的人:
ofsoftswitch13使用两个主要组成部分:
似乎mininet的默认设置包括在ofdatapath cmd中使用''no - slicing''选项,这阻止我添加队列。 所以基本的解决方案是在没有提到的选项标志的情况下运行数据库。 当我使用mininet创建我的虚拟网络时,我不得不更改一行mininet python文件。
在./mininet/mininet/node.py中更改第923行:
def __init__( self, name, dpopts='--no-slicing', **kwargs ):
到
def __init__( self, name, dpopts='', **kwargs ):
然后用
重建mininetsudo make install
如果您现在使用mininet来创建网络,则不再使用上述标记,并且可以添加队列!
如果有人在解决同样的问题,希望它有所帮助。
答案 1 :(得分:0)
感谢分享您的答案! 我只是想《RYU SDN Framework》提供了另一种解决这个问题的方法(第12.4章):
class SliceableSwitch(UserSwitch):
def __init__(self,name,**kwargs):
UserSwitch.__init__(self,name, dpopts='', **kwargs)
与您的方式类似,但无需重建 mininet。