本地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()
关键修改说明
删除交换机与控制器的链路:
你之前添加的net.addLink(s1, c0)和net.addLink(s2, c0)完全不需要,RemoteController是通过宿主机的网络栈和交换机通信的,Mininet内部不需要为两者创建虚拟链路。控制器IP配置:
保持和你命令行中成功的IP一致(即sudo mn --controller=remote,ip=[你的实际IP地址],port=6633里的IP),如果本地回环(127.0.0.1)不行,就用宿主机的实际网卡IP(比如192.168.x.x)。简化启动逻辑:
原脚本中topo.controllers[0].start()和topo.controllers[0].stop()是多余的,调用topo.start()时会自动启动控制器,topo.stop()也会自动停止控制器,所以可以去掉这两行。
修改后运行脚本,交换机就能正常和本地的OpenDaylight控制器建立连接了。
内容的提问来源于stack exchange,提问作者nejitaihei
相关产品推荐
相关产品推荐

