在ifconfig命令之后,不会更新Mininet转储信息

时间:2016-02-04 09:33:04

标签: python dump mininet ifconfig

我们将Mininet用于教学目的,作为网络模拟器,我们的学生可以在其中定义自己的IP网络和路由表。更新网络接口的IP地址时会出现一个常见问题。例如,如果我们通过ifconfig更改其IP地址,则使用Mininet的默认拓扑(两个主机和一个交换机,以及属于10.0.0.0/8的两个主机):

h1 ifconfig h1-eth0 192.168.1.1/24
h2 ifconfig h2-eth0 192.168.1.2/24

然后我们输入dump我们获得以下信息:

<Host h1: h1-eth0:10.0.0.1 pid=1169>
<Host h2: h2-eth0:10.0.0.2 pid=1173>

并且pingall命令不起作用。

有没有办法强制通过python方法或类似方法更新信息?我们已经检查过,如果我们向主机发送数据包,信息会更新,但这对于由数十台主机组成的拓扑结构来说是不切实际和乏味的。

我知道py h1.setIP()可以解决问题,但对于我们的目的而言,继续使用像ifconfig这样的操作系统命令而不是使用python调用非常重要。

提前致谢。

1 个答案:

答案 0 :(得分:0)

在mininet中,默认情况下将交换机创建为第2层交换机,默认情况下它具有多个规则。你可以使用

sh ovs-ofctl dump-flows s1

检查s1中的流规则。

因此,在更改h1和h2的IP地址之前,规则如下:

NXST_FLOW reply (xid=0x4)

是空的。

然后输入pingall,交换机将根据原始IP地址(10.0.0.1&amp; 10.0.0.2)添加规则,如下所示:

NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=1.376s, table=0, n_packets=2, n_bytes=196, idle_timeout=60, idle_age=1, priority=65535,icmp,in_port=2,vlan_tci=0x0000,dl_src=f6:6b:f6:42:44:ac,dl_dst=06:37:92:eb:2c:a0,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,icmp_type=0,icmp_code=0 actions=output:1
 cookie=0x0, duration=1.375s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=1, priority=65535,icmp,in_port=2,vlan_tci=0x0000,dl_src=f6:6b:f6:42:44:ac,dl_dst=06:37:92:eb:2c:a0,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,icmp_type=8,icmp_code=0 actions=output:1
 cookie=0x0, duration=1.374s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=1, priority=65535,icmp,in_port=1,vlan_tci=0x0000,dl_src=06:37:92:eb:2c:a0,dl_dst=f6:6b:f6:42:44:ac,nw_src=10.0.0.1,nw_dst=10.0.0.2,nw_tos=0,icmp_type=0,icmp_code=0 actions=output:2

mininet将“h1”映射到10.0.0.1,将“h2”映射到10.0.0.2

现在如果您将IP更改为192.168.1.1/24和192.168.1.2/24。规则保留为10.0.0.1和10.0.0.2。然后在60秒空闲超时后,它再次变为空。

因此,如果您想使用新IP连接到彼此。您可以尝试对主机名使用单个ping,例如:

h1 ping h2
h2 ping h2

更改Mininet中的映射,然后您可以再次ping通。