实验二ovs交换机

1.请用Markdown排版;
2.基础要求提交
a) /home/用户名/学号/lab2/目录下执行ovs-vsctl show命令、以及p0和p1连通性测试的执行结果截图;


b) /home/用户名/学号/lab2/目录下开启Mininet CLI并执行pingall命令的截图、上述目录下查看OVS流表的命令结果截图,wireshark抓包截图,其余文字请勿赘述,否则扣分;




3.进阶要求为选做,有完成的同学请提交代码和执行结果截图,有完成比未完成的上机分数更高。

#!/usr/bin/python

from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
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 myNet():
 
    net = Mininet( topo=None,
                   build=False,
                   ipBase='10.0.0.0/8')
 
    info( '*** Adding controller\n' )
    c0=net.addController(name='c0',
                      controller=Controller,
                      ip='127.0.0.1',
                      protocol='OpenFlow13',
                      port=6653)
 
    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 switches\n')
    s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
    s2 = net.addSwitch('s2', cls=OVSKernelSwitch)
 
    info( '*** Add links\n')
    net.addLink(h1, s1, 1, 1)
    net.addLink(h2, s1, 1, 2)
    net.addLink(h3, s2, 1, 1)
    net.addLink(h4, s2, 1, 2)
    net.addLink(s1, s2, 3, 3)
 
    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')
    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( "*** Running test\n" )
    h1.cmdPrint( 'ping -c 3 ' + h4.IP() )
    h1.cmdPrint( 'ping -c 3 ' + h3.IP() )
    h2.cmdPrint( 'ping -c 3 ' + h4.IP() )
    h2.cmdPrint( 'ping -c 3 ' + h3.IP() )
    h3.cmdPrint( 'ping -c 3 ' + h2.IP() )
    h3.cmdPrint( 'ping -c 3 ' + h1.IP() )
    h4.cmdPrint( 'ping -c 3 ' + h2.IP() )
    h4.cmdPrint( 'ping -c 3 ' + h1.IP() )

    CLI(net)
    net.stop()
 
if __name__ == '__main__':
    setLogLevel( 'info' )
    info( '*** Scratch network demo (kernel datapath)\n' )
    Mininet.init()
    myNet()





4.个人总结,包括但不限于实验难度、实验过程遇到的困难及解决办法,个人感想,不少于200字。
该实验的目的是能够掌握对Open vSwitch进行基本操作;能够通过命令行终端使用OVS命令操作Open vSwitch交换机,管理流表;能够通过Mininet的Python代码运行OVS命令,控制网络拓扑中的Open vSwitch交换机。
在实验过程中遇到的问题:
1.设置完ovs交换机以及其端口、虚拟网络后,ns0还是不能ping通ns1
解决办法:更换了新的虚拟机并且将p0和p1设置成同一网段
2.删除ovs交换机:sudo ovs-vsctl del-br 交换机
删除ovs交换机的端口:sudo ovs-vsctl del-port 交换机 端口
删除虚拟空间:sudo ip [-all] netns del[NAME]
3.在添加流表和划分vlan时,要按照要求给定相应端口配置
先用进入mininet用net命令查看链路和端口信息
然后进行规划

posted on 2022-09-24 19:22  Qwertyuzxc  阅读(252)  评论(0编辑  收藏  举报