实验2:Open vSwitch虚拟交换机实践

a)

b)


进阶

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')

  c0=net.addController(name='c0',
                    controller=Controller,
                    ip='127.0.0.1',
                    protocol='OpenFlow13',
                    port=6653)
  # add Switch1 and Switch2
  s2 = net.addSwitch('s2', cls=OVSKernelSwitch)
  s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
  # add Host
  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)
  h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None)
  h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
  # add Link
  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)

  net.build()
  for controller in net.controllers:
      controller.start()

  net.get('s2').start([c0])
  net.get('s1').start([c0])


  # add flow table to s1
  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')

  # add flow table to s2
  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')


  CLI(net)
  net.stop()
if __name__ == '__main__':
  setLogLevel( 'info' )
  myNetwork()

个人总结:
添加流表需要新开一个命令行
运行进阶要求的代码时需要关闭其他正在使用的mininet进程
wireshark抓取时需要在命令行mininet下进行pingall
运行进阶的代码时使用sudo python3 文件名.py
流表关闭后在开启需要重新添加

posted @ 2022-09-21 20:06  DJ色额客气客气  阅读(22)  评论(0编辑  收藏  举报