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 exampleTwo directly connected switches plus a host for each switch:host --- switch --- switch --- hostAdding 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 Topoclass MyTopo( Topo ): # 用类继承的方式定义"Simple topology example."def build( self ):"Create custom topo."# Add hosts and switchesleftHost = self.addHost( 'h1' )rightHost = self.addHost( 'h2' )leftSwitch = self.addSwitch( 's3' )rightSwitch = self.addSwitch( 's4' )# Add linksself.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 --- hostAdding 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 switchesleftHost = self.addHost( 'h1' )rightHost = self.addHost( 'h2' )leftSwitch = self.addSwitch( 's3' )rightSwitch = self.addSwitch( 's4' )# Add linksself.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
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust开发WASM,浏览器运行WASM

首先需要安装wasm-pack cargo install wasm-pack 使用cargo创建工程 cargo new --lib mywasm 编辑Cargo.toml文件&#xff0c;修改lib的类型为cdylib&#xff0c;并且添加依赖wasm-bindgen [package] name "mywasm" version "0.1.0" edition "…

css1文本属性

一.颜色&#xff08;color&#xff09;&#xff08;一般用16进制&#xff09; 二.对齐&#xff08;text-align) 三.装饰&#xff08;text-decoration&#xff09; 四.缩进&#xff08;text-indent&#xff09;&#xff08;一般用2em&#xff09;&#xff08;有单位&#xff09;…

计算机组成原理——计算机系统概述

文章目录 概要计算机硬件的基本组成早期冯诺依曼的结构介绍特点 现代计算机的结构介绍五大部件的归属 五大部件存储器&#xff1a;存储体 MAR、MDR运算器控制器 运行原理 计算机软件系统软件和应用软件三种级别的语言编译程序与解释程序的区别 软件硬件功能程序的等价性指令集体…

《Git 简易速速上手小册》第9章:Git 工作流程定制(2024 最新版)

文章目录 9.1 选择合适的工作流9.1.1 基础知识讲解9.1.2 重点案例&#xff1a;为中等规模的 Python 项目选择 Feature Branch 工作流9.1.3 拓展案例 1&#xff1a;适应 Gitflow 工作流的大型项目9.1.4 拓展案例 2&#xff1a;使用 Forking 工作流的开源 Python 项目 9.2 定制化…

C++入门学习(二十五)do-while循环

do { // 代码块&#xff0c;至少会执行一次 } while (条件); 对比一下while和do-while循环&#xff1a; 因为while循环先判断条件&#xff0c;所以数字10直接就没有进入for循环里&#xff0c;卡在了判断条件这一步&#xff0c;所以就没有输出数据&#xff1b; do-while循环是…

迭代器和生成器

迭代器和生成器 一、迭代器① iter()② next()③ 自定义迭代器 二、生成器① 创建生成器1、斐波那契数列2、yield 创建 ② 使用send() 一、迭代器 迭代器是一个可以记住遍历的位置的对象&#xff0c;迭代器从第一个元素开始访问&#xff0c;直到所有元素访问结束 ① iter() …

NX/UG二次开发—其他—矩形套料(排料)简介

算法逻辑 排料方法一定时间内获取近似解的算法 看了一些论文和博客&#xff0c;一般排料方法采用最低水平线算法排料&#xff0c;再此基础上增加空余区域填充。 然后配合遗传学算法||模拟退火算法||蚁群算法||免疫算法等&#xff0c;在一定时间内求得一组最优解。 在最简单的…

挑战杯 python+大数据校园卡数据分析

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;3分 该项目较为新颖&am…

java日志框架总结(五、logback日志框架)

一、logback概述 Logback是由log4j创始人设计的又一个开源日志组件。 Logback当前分成三个模块&#xff1a; 1、logback-core, 2、logback- classic 3、logback-access。 1&#xff09;logback-core是其它两个模块的基础模块。 2&#xff09;logback-…

云服在手,轻松过年!告别沉重电脑包,随时随地工作无忧

临近春节&#xff0c;不少人都要准备回老家了 但回了老家&#xff0c;就不能像回自己家一样&#xff0c;资料文件都在自己电脑&#xff0c;处理事务能随时随地&#xff0c;毕竟舟车劳顿&#xff0c;总不能身上带着台式机/手提电脑来回折腾。 那么如何既能轻装回家&#xff0c…

“掌握温度,感知湿度,一触即知!”DHT11温湿度传感器,为您的生活增添一份关怀与精准。#非标协议【下】

“掌握温度&#xff0c;感知湿度&#xff0c;一触即知&#xff01;”DHT11温湿度传感器&#xff0c;为您的生活增添一份关怀与精准。#非标协议【下】 前言预备知识1.DHT11温湿度传感器初识1.1产品概述1.2与51单片机接线1.3数据传送逻辑和数据格式 2.发送时序检测DHT11温湿度传感…

【01】判断素数/质数(C语言)

目录 &#xff08;1&#xff09;素数特点&#xff1a;只能被1和本身整除 &#xff08;2&#xff09;代码如下&#xff1a; &#xff08;3&#xff09;运行结果如下 ​编辑 &#xff08;4&#xff09;函数引申 &#xff08;1&#xff09;素数特点&#xff1a;只能被1和本身…