Mininet南向接口添加,删除流表操作

实验拓扑:


1.按下输入命令,构建以上拓扑

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. mn --topo single,3 --mac --switch ovsk --controller remote  
如下图,创建了host:h2,h3,h4;Switch:s1;Controller:c0 (127.0.0.1:6634)



2.通过dump 命令查看各设备信息



3.通过以下命令查看流表,没有表项

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. dpctl dump-flows tcp:127.0.0.1:6634  


4.用ping命令拼h2和h3,此时是不同的,因为没有流表项

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. h2 ping -c3 h3  


5.添加两个表项,分别是端口1到端口2,端口2到端口1

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. dpctl add-flow tcp:127.0.0.1:6634 in_port=2,actions=output:1  
  2. dpctl add-flow tcp:127.0.0.1:6634 in_port=1,actions=output:2  


6.此时查看流表,可以看到相应的表项已经加入,注意默认表项存活时间为60s,60s后表项将消失,可以加idle_timeout参数指定时间

7.此时h2拼h3可以拼通了



8.删除表项

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. dpctl del-flows tcp:127.0.0.1:6634  
通过上面的命令删除表项,删除之后h2和h3当然是不通了。
Mininet可以通过使用流表检测器来检测规则冲突。在Mininet中,可以使用OpenFlow规则集来指定交换机的流表规则。当使用多个规则时,可能会出现规则冲突的情况。为了解决这个问题,可以使用流表检测器来检测规则冲突,并且在运行时自动删除冲突的规则。 以下是一个简单的测试示例: 1. 创建一个拓扑,包含两个交换机和两个主机。 2. 在交换机上设置一些OpenFlow规则,确保存在规则冲突。 3. 启动Mininet并运行拓扑。 4. 在Mininet中使用流表检测器来检测规则冲突。 5. 检查流表检测器是否成功检测到冲突,并自动删除冲突的规则。 下面是一个基本的Python脚本示例,用于在Mininet中设置OpenFlow规则和流表检测器来检测规则冲突: ``` from mininet.net import Mininet from mininet.node import Controller, OVSKernelSwitch from mininet.cli import CLI from mininet.log import setLogLevel def topology(): net = Mininet(controller=Controller, switch=OVSKernelSwitch) c0 = net.addController('c0') s1 = net.addSwitch('s1') s2 = net.addSwitch('s2') h1 = net.addHost('h1') h2 = net.addHost('h2') net.addLink(h1, s1) net.addLink(h2, s2) net.addLink(s1, s2) # 设置交换机的OpenFlow规则 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') s2.cmd('ovs-ofctl add-flow s2 in_port=1,actions=output:2') s2.cmd('ovs-ofctl add-flow s2 in_port=2,actions=output:1') # 设置流表检测器 s1.cmd('ovs-appctl ofproto/trace s1 in_port=1,dl_type=0x0800,nw_src=10.0.0.1,nw_dst=10.0.0.2') s1.cmd('ovs-appctl ofproto/trace s1 in_port=2,dl_type=0x0800,nw_src=10.0.0.2,nw_dst=10.0.0.1') # 启动网络和控制器 net.build() c0.start() s1.start([c0]) s2.start([c0]) # 启动交换机之间的通信 s1.cmd('ifconfig s1-eth2 0') s2.cmd('ifconfig s2-eth2 0') s1.cmd('ifconfig s1-eth2 10.0.0.1 netmask 255.255.255.0') s2.cmd('ifconfig s2-eth2 10.0.0.2 netmask 255.255.255.0') # 启动CLI CLI(net) # 关闭网络 net.stop() if __name__ == '__main__': setLogLevel('info') topology() ``` 在这个例子中,我们创建了一个包含两个交换机和两个主机的拓扑。然后,我们设置了交换机的OpenFlow规则,并使用流表检测器来检测规则冲突。最后,我们启动了网络和CLI,并在CLI中运行了测试。 请注意,这只是一个基本示例,实际的测试可能需要更复杂的OpenFlow规则和检测器设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值