You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地OpenDaylight控制器与Mininet实例连接问题解决

问题解决:修改Mininet脚本适配本地控制器连接

你的脚本核心问题是错误地为交换机和远程控制器添加了Mininet内部链路,RemoteController是通过外部网络(而非Mininet拓扑内的虚拟链路)与交换机建立OpenFlow连接的,多余的链路会阻断正常的控制器发现流程。

修改后的完整脚本

from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.cli import CLI

def create_topology():
    # 初始化网络,不指定默认控制器
    net = Mininet(controller=None)
    # 添加远程控制器,替换[你的实际IP地址]为本地真实IP(和命令行中成功的IP一致)
    c0 = net.addController('c0', controller=RemoteController, ip='[你的实际IP地址]', port=6633)
    # 添加交换机和主机
    s1 = net.addSwitch('s1')
    s2 = net.addSwitch('s2')
    h1 = net.addHost('h1')
    h2 = net.addHost('h2')
    h3 = net.addHost('h3')
    h4 = net.addHost('h4')
    # 主机与交换机的链路保留
    net.addLink(h1, s1)
    net.addLink(h2, s2)
    net.addLink(h3, s1)
    net.addLink(h4, s2)
    # 移除交换机与控制器的链路!这是关键错误点
    return net

if __name__ == '__main__':
    topo = create_topology()
    topo.start()
    CLI(topo)
    topo.stop()

关键修改说明

  1. 删除交换机与控制器的链路:
    你之前添加的net.addLink(s1, c0)和net.addLink(s2, c0)完全不需要,RemoteController是通过宿主机的网络栈和交换机通信的,Mininet内部不需要为两者创建虚拟链路。

  2. 控制器IP配置:
    保持和你命令行中成功的IP一致(即sudo mn --controller=remote,ip=[你的实际IP地址],port=6633里的IP),如果本地回环(127.0.0.1)不行,就用宿主机的实际网卡IP(比如192.168.x.x)。

  3. 简化启动逻辑:
    原脚本中topo.controllers[0].start()和topo.controllers[0].stop()是多余的,调用topo.start()时会自动启动控制器,topo.stop()也会自动停止控制器,所以可以去掉这两行。

修改后运行脚本,交换机就能正常和本地的OpenDaylight控制器建立连接了。

内容的提问来源于stack exchange,提问作者nejitaihei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:02:26