1-3 mininet中使用python API直接拓扑定义以及启动方式对比

作为SDN网络中搭建拓扑非常重要的仿真平台,我们可以使用mininet默认的库内拓扑文件,也可以使用python语言进行自定义拓扑。使用python进行拓扑定义时,不同的定义方式将导致其启动的方式由所不同。
一、采用最原始的命令启动方式:
sudo mn --custom <custom_example.py> --topo mytopo
sudo mn --custom <custom_example.py> --topo mytopo 的意思是,以超级用户权限运行 Mininet 命令行工具,使用自定义拓扑文件 <custom_example.py> 来创建一个名为 mytopo 的拓扑,例如官网中的
脚本例子(官网)topo_3.py:

"""Custom topology example

Two directly connected switches plus a host for each switch:

 host --- switch --- switch --- host

Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""

from mininet.topo import Topo

class MyTopo( Topo ): # 用类继承的方式定义
  "Simple topology example."

  def build( self ):
      "Create custom topo."

      # Add hosts and switches
      leftHost = self.addHost( 'h1' )
      rightHost = self.addHost( 'h2' )
      leftSwitch = self.addSwitch( 's3' )
      rightSwitch = self.addSwitch( 's4' )

      # Add links
      self.addLink( leftHost, leftSwitch )
      self.addLink( leftSwitch, rightSwitch )
      self.addLink( rightSwitch, rightHost )

topos = { 'mytopo1': ( lambda: MyTopo() ) }  

在这个示例代码中,定义了继承自Topo的自定义拓扑类 MyTopo。最后的topos字典中定义相应的键值对,其中键是拓扑的名称,而值是一个函数。这个函数就是执行创建拓扑对象。在sudo mn 中使用mytopo1拓扑时,Mininet会调用lambda函数来创建MyTopo对象,并使用该对象来构建网络。如图1
在这里插入图片描述
图1 原始启动方式
二、使用简化的sudo mn方式启动
每次都调用 sudo mn --custom <custom_example.py> --topo mytopo 比较麻烦,可以将代码改为如下,使用 sudo mn --custom <custom_example.py>方
式,具体的命令修改如下topo_31.py:“”"Custom topology example


Two directly connected switches plus a host for each switch:

   host --- switch --- switch --- host

Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""

from mininet.topo import Topo
from mininet.net import Mininet  # 引入net模块

class MyTopo( Topo ):
    "Simple topology example."

    def build( self ):
        "Create custom topo."

        # Add hosts and switches
        leftHost = self.addHost( 'h1' )
        rightHost = self.addHost( 'h2' )
        leftSwitch = self.addSwitch( 's3' )
        rightSwitch = self.addSwitch( 's4' )

        # Add links
        self.addLink( leftHost, leftSwitch )
        self.addLink( leftSwitch, rightSwitch )
        self.addLink( rightSwitch, rightHost )
#topos = { 'mytopo1': ( lambda: MyTopo() ) }
topo = MyTopo()  #
net = Mininet(topo)  #启动topo

因为在代码中已经把创建的拓扑传递给net模块,所以不用带–topo 参数,如下图在这里插入图片描述
上一篇博文1-2 Mininet启动参数以及应用实践我们价绍了使用python脚本定义拓扑,然后把定义好的拓扑py文件使用sudo mn --custom 拓扑文件 的方式进行启用。当然我们也可以直接使用python3 接口调用,当然我们需要在原来代码的基础上进行优化,如果直接改成python3 进行调用,会出错
在这里插入图片描述

三、 使用python代码创建mininet网络并直接进入mininet CLI
修改代码 topo_32.py


from mininet.topo import Topo
from mininet.net import Mininet
from mininet.cli import CLI #导入模块

class MyTopology(Topo):
  def build(self):
      # 创建交换机
      switch = self.addSwitch('s1')

      # 创建主机
      host1 = self.addHost('h1')
      host2 = self.addHost('h2')

      # 创建链路
      self.addLink(host1, switch)
      self.addLink(host2, switch)

topo = MyTopology()
net = Mininet(topo)
net.start() #会自动启用mininet内置的控制器
CLI(net)  #调用cli
net.stop()

在这里插入图片描述
这种采用python直接运行的方式,需要在代码中进行拓扑说明和mininet
中CLI函数启用(需要引入相应的模块)
值得注意的是,在遵循脚本语法规则的前提下,我们也可以直接用函数定义的方式进行(没有引用Topo类,使用net模块直接定义)
如:

#mininet_ovs_mac_0.py
from mininet.net import Mininet
from mininet.node import Controller, OVSSwitch
from mininet.cli import CLI
#from mininet.log import setLogLevel
def mininet_ovs_mac():
  net = Mininet(controller=Controller, switch=OVSSwitch)
  c0 = net.addController('c0')
# 添加三个交换机和三个主机
  s1 = net.addSwitch('s1')
  s2 = net.addSwitch('s2')
  h1 = net.addHost('h1',ip='10.0.0.10')
  h2= net.addHost('h2',ip='10.0.0.20')
  h3= net.addHost('h3',ip='10.0.0.30')
# 连接交换机和主机
  net.addLink(h1, s1,port2=1)
  net.addLink(h2, s2,port2=1)
  net.addLink(h3, s2,port2=2)
#net.addLink(h4, s3,port2=2) #s3用端口2与h4连接
# 连接交换机
  net.addLink(s1, s2,port1=4,port2=4)#s1的4端口与s2的4端口连接
  net.build()
  c0.start()
  s1.start([c0])
  s2.start([c0])
  #net.start()

#以上四句启动的命令也可以直接用net.start(),表示一键启动net中的所有节点
  CLI(net)  #决定了使用python3启动 而不是使用mn启动,否则会嵌套mn出错
  net.stop()
if __name__ == '__main__':
  #setLogLevel('info')
  mininet_ovs_mac()

如果没有CLI(net),直接用python3启动则无法打开mininet CLI在这里插入图片描述
注意当在py代码中没有启用CLI(net)代码进行mininet CLI启用时,只能用 sudo mn --custom +py文件方式(如下图)
在这里插入图片描述
在这里插入图片描述

总结:
使用py编写的拓扑脚本依据代码中的模块调用不同,其对应的启动方式也不同:
1 在代码中对hosts,switchs,links网络拓扑的元素进行定义,没有对mininet的其他调用说明,则必须使用sudo mn --custom <custom_example.py> --topo mytopo1
2 使用Topo类定义的只是逻辑拓扑,仍需要把拓扑传递给net模块启动(分配资源运行),Topo类可以更加详细设计拓扑
3使用net创建的是直接运行的网络环境。
在这里插入图片描述

mininet拓扑的main class
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/381012.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB知识点:使用逻辑值修改或删除矩阵元素

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.4.4 逻辑运算 3.4.4.3 使用逻辑值修改或删…

【java】简单的Java语言控制台程序

一、用于文本文件处理的Java语言控制台程序示例 以下是一份简单的Java语言控制台程序示例&#xff0c;用于文本文件的处理。本例中我们将会创建一个程序&#xff0c;它会读取一个文本文件&#xff0c;显示其内容&#xff0c;并且对内容进行计数&#xff0c;然后将结果输出到控…

Github 2024-02-09 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-09统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目4Go项目2Scala项目1PLpgSQL项目1Ruby项目1HTML项目1Solidity项目1Lua项目1 开源个人理财应用 Mayb…

【小沐学GIS】基于Python绘制三维数字地球Earth(OpenGL)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…

JavaSE——数组(2/2)-数组在计算机中的执行原理、数组案例、Debug工具的使用

目录 数组在计算机中的执行原理 Java内存分配介绍 数组的执行原理 多变量指向同一数组 数组案例 求最大值 数组反转 随机排名 Debug工具的使用 数组在计算机中的执行原理 Java内存分配介绍 程序都是在内存中执行的&#xff0c;Java程序编译之后会产生一个class文件&…

嵌入式学习之Linux入门篇笔记——17,makefile基本语法(上)

配套视频学习链接&#xff1a;http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 目录 一&#xff0e;设置 vim 首行缩进 二.Makefile 基本语法…

【JS逆向三】逆向某某网站的sign参数,并模拟生成仅供学习

逆向日期&#xff1a;2024.02.06 使用工具&#xff1a;Node.js 类型&#xff1a;webpack 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08;直接解密即可&#xff09;&#xff1a;AES加解密工具 1、打开某某…

Ansible copy模块 复制文件使用 主服务器 给副服务器 复制文件使用 指定文件权限 覆盖备份等

目录 参数复制文件然后进行同时复制操作 给定内容生成文件&#xff0c;并制定权限验证 关于覆盖先查看当前内容覆盖并备份查看文件权限 还有有没有备份查看文件内容 参数 这个模块用于将文件复制到远程主机&#xff0c;同时支持给定内容生成文件和修改权限等。   其相关选项…

深入理解java之多线程(一)

前言&#xff1a; 本章节我们将开始学习多线程&#xff0c;多线程是一个很重要的知识点&#xff0c;他在我们实际开发中应用广泛并且基础&#xff0c;可以说掌握多线程编写程序是每一个程序员都应当必备的技能&#xff0c;很多小伙伴也会吐槽多线程比较难&#xff0c;但因为其实…

gem5学习(17):ARM功耗建模——ARM Power Modelling

目录 一、Dynamic Power States 二、Power Usage Types 三、MathExprPowerModels 四、Extending an existing simulation 五、Stat dump frequency 六、Common Problems 官网教程&#xff1a;gem5: ARM Power Modelling 通过使用gem5中已记录的各种统计数据&#xff0c;…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月10日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月10日 星期六 农历正月初一 春节 1、 国务院&#xff1a;到2025年&#xff0c;初步建成覆盖各领域、各环节的废弃物循环利用体系。 2、 国家移民管理局&#xff1a;部分国家人员可以用更多事由免签入境海南。 3、 市场…

使用AI开发一个红包封面生成器

使用 VUE3&#xff0c;和 Express 开发一个红包封面。 生成效果如下 体验地址&#xff1a;https://hongbao.digitalmodel.top/

政安晨:示例演绎TensorFlow的官方指南(三){快速使用数据可视化工具TensorBoard}

这篇文章里咱们演绎TensorFLow的数据可视化工具&#xff1a;TensorBoard。 在机器学习中&#xff0c;要改进模型的某些参数&#xff0c;您通常需要对其进行衡量。TensorBoard 是用于提供机器学习工作流期间所需测量和呈现的工具。它使您能够跟踪实验指标&#xff08;例如损失和…

Blender教程(基础)--试图的显示模式-22

一、透视模式&#xff08;AltZ&#xff09; 透视模式下可以实现选中透视的物体信息 发现选中了透视区的所有顶点 二、试图着色模式-显示网格边框 三、试图着色模式-显示实体 三、试图着色模式-材质预览 四、试图着色模式-显示渲染预览

RNA二级结构基础知识+一些绘制程序及用法

整理笔记翻出来的&#xff0c;以下所有程序的测试时间都是2019年11月&#xff0c;不保证现在是否能用。基本都来自论文。 此外&#xff0c;这些程序都属于能用&#xff0c;但是对长序列&#xff08;>3000&#xff09;或者复杂序列不够友好的。 &#xff08;后来我自己写了…

Qt PCL学习(三):点云滤波

注意事项 版本一览&#xff1a;Qt 5.15.2 PCL 1.12.1 VTK 9.1.0前置内容&#xff1a;Qt PCL学习&#xff08;一&#xff09;&#xff1a;环境搭建、Qt PCL学习&#xff08;二&#xff09;&#xff1a;点云读取与保存 0. 效果演示 1. pcl_open_save.pro QT core guigr…

Project 2010下载安装教程,保姆级教程,附安装包和工具

前言 Project是一款项目管理软件&#xff0c;不仅可以快速、准确地创建项目计划&#xff0c;而且可以帮助项目经理实现项目进度、成本的控制、分析和预测&#xff0c;使项目工期大大缩短&#xff0c;资源得到有效利用&#xff0c;提高经济效益。软件设计目的在于协助专案经理发…

除夕快乐(前端小烟花)

家人们&#xff0c;新的一年好运常在&#xff0c;愿大家在新的一年里得偿所愿&#xff0c;发财暴富&#xff0c;愿大家找到属于自己的那个公主&#xff0c;下面就给大家展示一下给公主的烟花 前端烟花 新的一年&#xff0c;新的挑战&#xff0c;愿我们不忘初心&#xff0c;砥砺…

谷歌发布AI新品Gemini及收费模式;宜家推出基于GPT的AI家装助手

&#x1f989; AI新闻 &#x1f680; 谷歌发布AI新品Gemini及收费模式 摘要&#xff1a;谷歌宣布将原有的AI产品Bard更名为Gemini&#xff0c;开启了谷歌的AI新篇章。同时推出了强化版的聊天机器人Gemini Advanced&#xff0c;支持更复杂的任务处理&#xff0c;提供了两个月的…

人力资源智能化管理项目(day04:组织架构)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 觉得有帮助的同学&#xff0c;可以点心心支持一下哈 树组件应用 <!-- 展示树形结构 --><!-- default-expand-all默认展开所有节点 --><el-tree default-ex…