【问题标题】:mininet connect to remote ODL controller with python codemininet 使用 python 代码连接到远程 ODL 控制器
【发布时间】:2018-04-10 14:03:38
【问题描述】:

我是 mininet 的新手,我想查看使用 opendaylight(carbon) 控制器的网络拓扑。我试过命令:

sudo mn --topo linear,3 --mac \
    --controller=remote,ip=10.109.253.152,port=6633 \
    --switch ovs,protocols=OpenFlow13,stp=1

并且opendaylight可以成功展示整个拓扑。然后,我想仅使用 python 代码来显示相同​​的结果。但是,它不起作用。

#!/usr/bin/python

from mininet.net import Mininet
from mininet.node import RemoteController, OVSSwitch
from mininet.log import info, setLogLevel
from mininet.cli import CLI

def RemoteCon():
    net = Mininet(controller=RemoteController, switch=OVSSwitch)

    c1 = net.addController('c1', ip='10.109.253.152',port=6633)
    h1 = net.addHost('h1')
    h2 = net.addHost('h2')
    s1 = net.addSwitch('s1')
    net.addLink(s1, h1)
    net.addLink(s1, h2)

    net.build()
    net.start()

    CLI(net)

    net.stop()

if __name__ == '__main__':
    setLogLevel('info')
    RemoteCon()

哦,顺便问一下,交换机是否具有默认转发功能?有时,我的主机和交换机相互连接,运行上述代码时主机可以互相 ping,h1 不能 ping h2,反之亦然。

提前致谢。

【问题讨论】:

    标签: sdn mininet opendaylight


    【解决方案1】:

    我假设您正在使用 OpenDaylight 中的 l2switch 功能。

    如果你搜索这个论坛,你会发现其他人抱怨不一致 使用 l2switch 时的连接性。您可能遇到了错误,但是 重新启动 OpenDaylight 后,可能没问题。默认情况下,使用 l2switch 它应该学习拓扑的链接,并创建流以允许 所有主机都 ping 其他主机。

    至于你的 python 脚本来运行 mininet,我没有看到任何明显的东西。 你能在 OpenDaylight karaf.log 中寻找任何线索吗?或检查 OVS 日志是否有其他线索?如果你只是没有看到任何东西 在拓扑查看器中,我的猜测是 OVS 没有连接 到 OpenDaylight。

    一件事要仔细检查。我不知道python脚本是如何决定的 要使用哪个 openflow 版本,但也许它使用的是 1.0,这就是 与您的命令行有很大不同,将其设置为 1.3?

    【讨论】:

    • 谢谢,杰莫。 ovs 日志如下所示:record 656: 2018-04-11 07:57:55.011 "ovs-vsctl (invoked by bash): ovs-vsctl -- --id=@s1c1 create Controller "target=\"tcp:10.109.253.152:6633\"" max_backoff=1000 -- --if-exists del-br s1 -- add-br s1 -- set bridge s1 controller=[@s1c1] other_config:datapath-id=0000000000000001 fail_mode=secure other-config:disable-in-band=true other-config:dp-desc=s1 -- add-port s1 s1-eth1 -- set Interface s1-eth1 ofport_request=1 -- add-port s1 s1-eth2 -- set Interface s1-eth2 ofport_request=2"
    • 由于我可以使用 mn 命令看到网络拓扑,我认为在 ODL 中启用了 l2switch。我已经尝试重启ODL,它仍然无法显示任何拓扑。
    • 我已经尝试过openfloodlight控制器,运行我的python脚本后我可以成功显示我的拓扑。这绝对是ODL的一个错误。谢谢jamo。
    【解决方案2】:

    我发现您错过了启动交换机以与控制器通信。试试

    s1.start([c1])
    

    这定义了交换机连接到哪个控制器。希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      您应该将协议参数作为命令行添加到 addSwitch 函数:

      s1 = net.addSwitch('s1',switch=OVSSwitch,protocols='OpenFlow10')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-11
        • 2016-11-16
        • 1970-01-01
        相关资源
        最近更新 更多