目录
基本环境
VM14.0
Ubuntu 18.04
JDK 1.8
官网 Mininet安装下载项目
git clone https://github.com/mininet/mininet
安装命令
-a 默认全部安装
-b 安装benchmark:oflops
-c安装核心之后清空已有配置
-d 删除某些敏感文件
-e 安装Mininet开发依赖
-f 安装OpenFolw协议支持
-h 打印帮助信息
-i 安装indigo Virtual Switch
-k 安装新的内核
-m 从源目录安装open vSwitch内核模块
-n 安装Mininet依赖和核心文件
-p 安装pox控制器
-r 删除已存在的open vSwitch包
-s 依赖源码
-t 完成其他的虚拟机创建任务
-v 安装Open switch
-V 指定Open vSwitch的版本
-w 安装Wireashark解析器
-x 安装NOX Classic控制器
-y 安装Ryu控制器
-0 安装openflow1.0
-3 安装openflow1.3
博主直接全安装了
cd mininet/util
sudo ./install.sh -a
过几分钟后出现Enjoy Mininet!就说明安装成功了!
使用命令
注意:一些翻译可能不太准确,读者敲sudo mn -h读英文原版更好。
Options:
-h, --help 显示帮助信息并退出
--switch=交换机 default|ivs|lxbr|ovs|ovsbr|ovsk|user[,param=value...]
ovs=OVSSwitch default=OVSSwitch ovsk=OVSSwitch
lxbr=LinuxBridge user=UserSwitch ivs=IVSSwitch
ovsbr=OVSBridge
--host=主机 cfs|proc|rt[,param=value...]
rt=CPULimitedHost{'sched': 'rt'} proc=Host
cfs=CPULimitedHost{'sched': 'cfs'}
--controller=控制器
default|none|nox|ovsc|ref|remote|ryu[,param=value...]
ovsc=OVSController none=NullController
remote=远程控制器 default=DefaultController
nox=NOX ryu=Ryu ref=控制器
--link=链接 default|ovs|tc|tcu[,param=value...] default=Link
ovs=OVSLink tcu=TCULink tc=TCLink
--topo=拓扑 linear|minimal|reversed|single|torus|tree[,param=value...]
linear=线性拓扑 torus=圆环拓扑 tree=树形拓扑
single=单交换机拓扑
reversed=单交换机反转拓扑 minimal=最小拓扑
-c, --clean 清楚并退出
--custom=自定义 从.py文件读取类或参数
--test=测试 none|build|all|iperf|pingpair|iperfudp|pingall
-x, --xterms 为每个节点生成xterm
-i IPBASE, --ipbase=基于IP
基于IP地址的主机
--mac 自动设置主机MAC地址
--arp set all-pairs ARP entries
-v VERBOSITY, --verbosity=信息复杂度
info|warning|critical|error|debug|output
--innamespace sw and ctrl in namespace?
--listenport=监听端口
用于无源开关监听的基本端口
--nolistenport 不使用被动监听端口
--pre=提前运行 CLI 脚本在测试之前运行
--post=之后运行 CLI 脚本在测试后运行
--pin 主机固定到CPU内核 (需要 --host cfs 或 --host rt)
--nat [option=val...] 将NAT添加到拓扑,主机链接到物理网络
警告:这可能会将使用Mininet的IP子网的计算机上的所有流量路由
到Mininet网络中。如果您需要更改Mininet的IP子网,请参阅--ipbase选项。
--version 打印版本并退出
--cluster=server1,server2...
在多台服务器上运行 (实验!)
--placement=block|random
--cluster的节点放置 (实验!)
种类 | 命令/参数 |
---|---|
网络构建启动 | --topo、--custom、--switch、--controller、--mac |
内部交互 | dump、net、nodes、links、dpctl、iperf |
外部运行 | -c、-h、--version |
nodes命令查看所有节点
net命令查看链接
更多命令参考Walkthrough
知识补充——拓扑结构
单一拓扑:一个交换机,交换机链接多个主机,举例,一个交换机三个主机
sudo mn --topo=single,3
线性拓扑,交换机呈线性排列,一个交换机下一个主机,举例,三个交换机三个主机
sudo mn --topo=linear,3
树形拓扑,树形排列,交换机层数与分支数,举例,二层的二叉树,三个交换机,四个主机
sudo mn --topo=tree,depth=2,fanout=2
自定义拓扑,自己写.py文件进行自定义,mytopo1是topo1.py文件中的类
sudo mn --custom topo1.py --topo=mytopo1
mininet图形化界面
在examples目录下,启动miniedit
之后会自动打开编辑页面
构建自定义网络,创建时单击左侧图标,再单击右侧即可,连线时鼠标左键点击一个拖到另一个
修改c0参数,右键点击c0,选择第二个选项修改,如果你的OpenDaylight与Mininet不在同一虚拟机里面,记得修改ip
修改交换机s1、s2参数,DPID是16位
修改主机h1、h2、h3参数
在Edit->Preferences里面有参数,可以看网段,修改openflow协议版本等等。
打开OpenDaylight,如果你没有安装控制器的话,可以看这篇文章。
点击左下角Run,查看最终结果
OpenDaylight Dlux页面,可以看到有两个交换机,使用的是openflow协议
保存的是.mn文件,再次使用File->open打开即可。
保存成.py文件(File->Export Level 2 Script)时,以下步骤再次使用。
查看.py文件
#!/usr/bin/python
from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call
def myNetwork():
net = Mininet( topo=None,
build=False,
ipBase='10.0.0.0/8')
info( '*** Adding controller\n' )
c0=net.addController(name='c0',
controller=Controller,
protocol='tcp',
port=6633)
info( '*** Add switches\n')
s1 = net.addSwitch('s1', cls=OVSKernelSwitch, dpid='0000000000000001')
s2 = net.addSwitch('s2', cls=OVSKernelSwitch, dpid='0000000000000002')
info( '*** Add hosts\n')
h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
info( '*** Add links\n')
net.addLink(s1, s2)
net.addLink(s1, h1)
net.addLink(s1, h2)
net.addLink(s2, h3)
info( '*** Starting network\n')
net.build()
info( '*** Starting controllers\n')
for controller in net.controllers:
controller.start()
info( '*** Starting switches\n')
net.get('s1').start([c0])
net.get('s2').start([c0])
info( '*** Post configure switches and hosts\n')
CLI(net)
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
myNetwork()
运行保存的拓扑
sudo python test.py
使用pingall命令后 ,Topology这里可以发现主机,也就能看到全部的拓扑结构了
点击Nodes,看到节点列表。
点击“NodeConnectors”号查看详细信息,如端口ID、端口名称、每个交换机的端口号、MAC地址。
点击Statistics列中的“NodesConnectors”查看具体节点ID的节点连接器的统计信息,可以看到交换机s1有三个接口,连接h1、h2、s2。
ODL获取交换机信息的界面在YangUI中,具体节点为:Yang UI APIopendaylight-inventory-rev->operational->nodes->node{id}。点击node{id},在下方出现的path中输入Node Id(在Nodes中点击后的详细信息列表上方,本机id为openflow:1),提交方式为GET,点击Send发出消息,则交换机信息则会出现在path下方。
鼠标向下滑,可以看到很多信息。
使用http://你的ip:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1 浏览器地址,在浏览器上可以看到xml版本的信息,也可使用postman等工具查看。
使用http://你的ip:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/opendaylight-flow-table-statistics:flow-table-statistics浏览器地址,可以看到流表的统计信息。
流表操作请查看:SDN-流表分析与增删改查
SDN相关内容,请查看:SDN-自学笔记
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。