//创建OVS交换机,以90学号命名
sudo ovs-vsctl add-br ovs-switch55
//创建端口p0,设置编号为100
sudo ovs-vsctl add-port ovs-switch55 p0
sudo ovs-vsctl set Interface p0 ofport_request=100 type=internal
//创建端口p1,设置编号为101
sudo ovs-vsctl add-port ovs-switch55 p1
sudo ovs-vsctl set Interface p1 ofport_request=101 type=internal
//创建一个虚拟网络空间ns0,将p0移入
sudo ip netns add ns0
sudo ip link set p0 netns ns0
sudo ip netns exec ns0 ip addr add 192.168.0.100/24 dev p0
sudo ip netns exec ns0 ifconfig p0 promisc up
//创建一个虚拟网络空间ns1,将p1移入
sudo ip netns add ns1
sudo ip link set p1 netns ns1
sudo ip netns exec ns1 ip addr add 192.168.0.101/24 dev p1
sudo ip netns exec ns1 ifconfig p1 promisc up
//查看网络状态
sudo ovs-vsctl show
//p0和p1连通性测
sudo ip netns exec ns0 ping 192.168.0.101
sudo ip netns exec ns1 ping 192.168.0.100
查看交换机
测试p0和p1连通性
h1 – h3互通
h2 – h4互通
其余主机不通
使用wireshark抓包 观察s1的三号端口,id为0
使用wireshark抓包 观察s2的三号端口,id为1
使用Mininet,编写Python代码,生成(一)中的SDN拓扑,并在代码中直接使用OVS命令,做到可以直接运行Python程序完成和(一)相同的VLAN划分。
#!/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(s2, h3,1,1)
net.addLink(s2, h4,2,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])
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( ‘*** Post configure switches and hosts\n‘)
CLI(net)
net.stop()
if __name__ == ‘__main__‘:
setLogLevel( ‘info‘ )
myNetwork()
原文:https://www.cnblogs.com/szb031902514/p/15311805.html