0

0

Mininet脚本连接本地OpenDaylight控制器教程

花韻仙語

花韻仙語

发布时间:2025-10-03 11:42:39

|

876人浏览过

|

来源于php中文网

原创

Mininet脚本连接本地OpenDaylight控制器教程

本文旨在解决Mininet自定义Python脚本无法连接本地OpenDaylight控制器的问题,而mn命令行工具却能正常工作。核心问题在于Mininet脚本需要显式配置控制器和交换机类型。通过在Mininet构造函数中明确指定controller=RemoteController和switch=OVSSwitch,可以确保Mininet拓扑正确地与本地运行的OpenDaylight控制器建立连接,从而实现SDN实验环境的稳定搭建。

理解连接挑战

在软件定义网络(sdn)的实验环境中,mininet作为一款流行的网络模拟器,常与opendaylight(odl)等控制器配合使用。用户在使用mininet命令行工具(如sudo mn --controller=remote,ip=127.0.0.1,port=6633)时,通常能顺利将模拟网络连接到本地运行的opendaylight控制器。然而,当尝试通过自定义python脚本构建mininet拓扑时,即使在脚本中指定了远程控制器信息,也可能遇到连接失败的问题。

这一差异的根本原因在于Mininet命令行工具会根据提供的参数自动推断并配置默认的控制器和交换机类型,例如,当指定--controller=remote时,它会默认使用RemoteController,并且通常会将交换机类型设置为OVSSwitch。而当使用Python脚本时,如果没有显式指定,Mininet构造函数可能会使用其默认的控制器和交换机类型(例如OVSKernelSwitch或UserSwitch),这可能与OpenDaylight期望的OpenFlow协议版本或连接机制不完全兼容,导致连接无法建立。

解决方案:显式配置Mininet构造函数

解决此问题的关键在于在Mininet脚本中,明确地在Mininet构造函数中指定所使用的控制器和交换机类型。具体而言,需要将controller参数设置为RemoteController,并将switch参数设置为OVSSwitch。

  1. controller=RemoteController的必要性 尽管您可能在net.addController()方法中再次指定了controller=RemoteController,但Mininet构造函数本身的controller参数决定了拓扑中所有未明确指定控制器的交换机将尝试连接到哪种类型的控制器。将其设置为RemoteController,确保Mininet在初始化时就为远程控制器连接做好了准备。

  2. switch=OVSSwitch的重要性OVSSwitch是Mininet中基于Open vSwitch的交换机实现,它通常支持更广泛的OpenFlow版本(如OpenFlow 1.3),并且与OpenDaylight控制器具有良好的兼容性。默认的Mininet交换机类型可能无法提供OpenDaylight所需的特定OpenFlow特性或连接行为。显式指定OVSSwitch可以确保交换机以ODL期望的方式运行。

示例代码:修正后的Mininet脚本

以下是根据上述解决方案修改后的Mininet脚本示例:

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

def create_topology():
    setLogLevel('info') # 设置日志级别,便于调试

    info('*** Creating network\n')
    # 关键修改:在Mininet构造函数中显式指定控制器和交换机类型
    net = Mininet(controller=RemoteController, switch=OVSSwitch)

    info('*** Adding controller\n')
    # 这里的addController定义了远程控制器的具体连接信息
    c0 = net.addController('c0', controller=RemoteController, ip='127.0.0.1', port=6633)

    info('*** Adding hosts and switches\n')
    s1 = net.addSwitch('s1')
    s2 = net.addSwitch('s2')
    h1 = net.addHost('h1')
    h2 = net.addHost('h2')
    h3 = net.addHost('h3')
    h4 = net.addHost('h4')

    info('*** Creating links\n')
    net.addLink(h1, s1)
    net.addLink(h2, s2)
    net.addLink(h3, s1)
    net.addLink(h4, s2)

    # 交换机与控制器的连接通常由Mininet在启动时自动处理,
    # 尤其是当在Mininet构造函数中指定了controller类型后。
    # 这里的addLink(s1, c0)和addLink(s2, c0)通常不是必需的,
    # 并且在某些情况下可能导致行为不预期。
    # 移除这两行通常是更推荐的做法,让Mininet自动将交换机连接到其默认控制器。
    # 如果需要精细控制,可以在addSwitch时指定controller参数。
    # net.addLink(s1, c0) # 建议移除
    # net.addLink(s2, c0) # 建议移除

    return net

if __name__ == '__main__':
    topo = create_topology()
    info('*** Starting network\n')
    topo.start() # 调用start()方法会启动控制器并连接交换机

    # 在Mininet启动后,可以通过CLI进行交互和验证
    info('*** Running CLI\n')
    CLI(topo)

    info('*** Stopping network\n')
    topo.stop()

注意: 原始脚本中net.addLink(s1, c0)和net.addLink(s2, c0)这两行通常不是必需的,因为当Mininet构造函数中指定了controller=RemoteController后,Mininet会自动尝试将所有交换机连接到默认的远程控制器。在某些情况下,显式添加这些链接可能会导致重复连接或不预期行为。因此,在上述修正后的代码中,已将这两行注释掉,推荐的做法是让Mininet自动处理交换机与控制器的连接。

Batch GPT
Batch GPT

使用AI批量处理数据、自动执行任务

下载

操作步骤与验证

  1. 启动OpenDaylight控制器: 在运行Mininet脚本之前,请确保您的OpenDaylight控制器实例已在本地运行,并且其OpenFlow插件已激活。通常,您可以通过进入OpenDaylight Karaf根目录并执行以下命令来启动它:

    ./bin/karaf

    进入Karaf CLI后,安装必要的OpenFlow特性(如果尚未安装):

    feature:install odl-restconf odl-l2switch-switch odl-dlux-all

    等待所有特性加载完成。

  2. 运行Mininet脚本: 打开一个新的终端窗口,导航到保存上述Python脚本的目录,并使用sudo权限执行脚本:

    sudo python your_script_name.py
  3. 验证连接:

    • Mininet CLI中验证: 在Mininet的CLI界面中,可以运行dpctl show s1或dpctl show s2来检查交换机与控制器的连接状态。如果连接成功,您会看到类似is_connected: true和控制器IP地址及端口的信息。
    • OpenDaylight Karaf日志: 观察OpenDaylight Karaf控制台的输出。当Mininet交换机连接时,Karaf日志中会打印出交换机注册成功的相关信息。
    • OpenDaylight DLUX UI: 访问OpenDaylight的DLUX用户界面(通常是http://localhost:8181/dlux/index.html),登录后您应该能在“拓扑”或“节点”视图中看到Mininet中创建的交换机和主机。

注意事项

  • IP地址与端口: 确保Mininet脚本中RemoteController的ip地址(通常是127.0.0.1)和port(默认是6633)与OpenDaylight控制器监听的地址和端口一致。
  • OpenDaylight状态: OpenDaylight控制器必须完全启动并准备好接受OpenFlow连接。如果控制器仍在启动或其OpenFlow插件未激活,连接将失败。
  • Mininet权限: 运行Mininet通常需要root权限,因此请务必使用sudo命令执行脚本。
  • 版本兼容性: 尽管上述解决方案在多数情况下有效,但不同版本的Mininet和OpenDaylight之间可能存在细微的行为差异。如果遇到问题,请查阅相应版本的官方文档。
  • 防火墙 确保没有防火墙规则阻止Mininet与OpenDaylight之间的6633端口通信。

总结

在自定义Mininet脚本中连接本地OpenDaylight控制器时,核心在于显式配置Mininet构造函数中的controller=RemoteController和switch=OVSSwitch。这一修改确保了Mininet模拟网络能够以OpenDaylight期望的方式初始化和连接,从而避免了因默认配置不匹配而导致的连接失败。通过遵循本文提供的步骤和注意事项,您可以成功搭建一个稳定且功能完善的SDN实验环境。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

715

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

625

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

739

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1235

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

575

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

699

2023.08.11

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号