Python 在执行ifconfig命令后,不会更新Mininet转储信息

Python 在执行ifconfig命令后,不会更新Mininet转储信息,python,dump,mininet,ifconfig,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: h

我们使用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调用是很重要的


提前感谢。

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

sh ovs-ofctl dump-flows s1
检查s1中的流程规则

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

NXST_FLOW reply (xid=0x4)
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
它是空的

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

NXST_FLOW reply (xid=0x4)
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。

在Mininet中,开关默认创建为第2层开关,默认情况下有多个规则。你可以用

sh ovs-ofctl dump-flows s1
检查s1中的流程规则

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

NXST_FLOW reply (xid=0x4)
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
它是空的

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

NXST_FLOW reply (xid=0x4)
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