控制器是为了更好集中控制网络的行为,当然在实际中我们可以根据需要选择是否选择控制器,或是结合ovs交换机的特点进行针对性的转发行为设置(功能需要书写代码进行软件定义),转发功能需要手工添加流表才能实现
如:topo_36.py
#自定义流表,无控制器,交换机将无法从控制器中自学习到流表,需要手动往交换机中添加流表才能使得连接在同一个交换机中的两个主机之间互相通信topo_36.py
from mininet.net import Mininet
from mininet.node import OVSSwitch
from mininet.cli import CLIdef create_topology():net = Mininet(switch=OVSSwitch)# 添加交换机s1 = net.addSwitch('s1')# 添加主机h1 = net.addHost('h1')h2 = net.addHost('h2')# 添加链路net.addLink(h1, s1,port2=1)net.addLink(h2, s1,port2=2)net.start()# 在交换机上下发流表s1.cmd('ovs-ofctl add-flow s1 in_port=1,actions=output:2')s1.cmd('ovs-ofctl add-flow s1 in_port=2,actions=output:1')# 在主机之间进行ping测试#h1.cmd('ping -c 3', h2.IP())# 进入Mininet的命令行界面CLI(net)net.stop()if __name__ == '__main__':create_topology()
注意,本文涉及的流表设置是采用cmd命令,流表与预定义的流数据行为相匹配,因此需要与网络拓扑中的端口连接相对应。一般情况下,在用net模块创建网络环境时,增加连接时如果没有制定连接的端口,则按照默认的代码先后顺序进行编号,如本文代码中的 net.addLink(h1, s1,port2=1)指定h1连接在s1的1号端口,代码中采用的拓扑如图1