(一)基本要求
a) /home/用户名/学号/lab2/目录下执行ovs-vsctl show命令、以及p0和p1连通性测试的执行结果截图;
b) /home/用户名/学号/lab2/目录下开启Mininet CLI并执行pingall命令的截图、上述目录下查看OVS流表的命令结果截图,wireshark抓包截图,其余文字请勿赘述,否则扣分;
(二)进阶实验
实验代码:
#!/usr/bin/env 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)
s2 = net.addSwitch('s2', cls=OVSKernelSwitch)
info( '*** Add hosts\n')
h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None)
info( '*** Add links\n')
net.addLink(h1, s1, 1, 1)
net.addLink(h2, s1, 1, 2)
net.addLink(s1, s2, 3, 3)
net.addLink(h4, s2, 1, 2)
net.addLink(h3, s2, 1, 1)
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])
#添加流表,完成VLAN划分
info("*** Send the flow table down\n\n")
s1.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3')
s1.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3')
s1.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=0,actions=pop_vlan,output=1')
s1.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=1,actions=pop_vlan,output=2')
s2.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3')
s2.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3')
s2.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=0,actions=pop_vlan,output=1')
s2.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=1,actions=pop_vlan,output=2')
#查看流表
info( "*** print the streamtable\n" )
info( s1.cmd( 'ovs-ofctl dump-flows s1 -O OpenFlow13' ))
info( s2.cmd( 'ovs-ofctl dump-flows s2 -O OpenFlow13' ))
#连通性检查
info("*** Running test\n")
info( "\nh1 ping h3\n" )
h1.cmdPrint('ping -c 3 ' + h3.IP())
info( "\nh2 ping h4\n" )
h2.cmdPrint('ping -c 3 ' + h4.IP())
info( '*** Post configure switches and hosts\n')
CLI(net)
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
myNetwork()
实验总结:
这一次实验整体做下来,感觉难度还不是很大。不过需要注意到的细节倒是有不少,比如在一开始创建交换机时,p1的代码就不能完全照p2的,ip地址、端口号等细节需要根据具体要求进行修改。但我在第一次做时,或许是因为自己急功近利的缘故,并没有将这些细节全部都注意到,导致了我错误连连。在仔细阅读实验文档后,才注意到这些细节。这件事让我明白了“心急吃不了热豆腐”、“磨刀不误砍柴工”,在做实验前,应当仔细的浏览一遍实验要求,不仅是实验,在生活中做事也应当如此。
还有遇到的困难就是,对于wireshark的使用陌生,一开始怎么也抓取不到,后来在上网查找资料后才知道,原来程序运行时,在新的端口输入 sudo wireshark 指令才有效果。
标签:info,ovs,s2,s1,vlan,交换机,vSwitch,net,Open
From: https://www.cnblogs.com/12306ya/p/16711730.html