capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE
LOCAL(br0): addr:aa:55:aa:55:00:00
- config: 0
- state: 0
+ config: PORT_DOWN
+ state: LINK_DOWN
speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY: frags=normal miss_send_len=0
])
state: LINK_DOWN
speed: 0 Mbps now, 0 Mbps max
LOCAL(br0): addr:aa:55:aa:55:00:0x
- config: 0
- state: 0
+ config: PORT_DOWN
+ state: LINK_DOWN
speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY: frags=normal miss_send_len=0
])
AT_CHECK([STRIP_XIDS stdout], [0], [dnl
OFPST_PORT_DESC reply:
LOCAL(br0): addr:aa:55:aa:55:00:00
- config: 0
- state: 0
+ config: PORT_DOWN
+ state: LINK_DOWN
speed: 0 Mbps now, 0 Mbps max
])
OVS_VSWITCHD_STOP
AT_CHECK([STRIP_XIDS stdout], [0], [dnl
OFPST_PORT_DESC reply (OF1.2):
LOCAL(br0): addr:aa:55:aa:55:00:00
- config: 0
- state: 0
+ config: PORT_DOWN
+ state: LINK_DOWN
speed: 0 Mbps now, 0 Mbps max
])
OVS_VSWITCHD_STOP
| ${PERL} $srcdir/uuidfilt.pl],
[0], [<0>
])
+ovs-appctl time/stop
# Add 4 flows.
for in_port in 4 3 2 1; do
- ovs-ofctl add-flow br0 hard_timeout=1${in_port},in_port=$in_port,actions=drop
+ ovs-ofctl add-flow br0 hard_timeout=$((10 + in_port * 3)),in_port=$in_port,actions=drop
done
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
- hard_timeout=11, in_port=1 actions=drop
- hard_timeout=12, in_port=2 actions=drop
- hard_timeout=13, in_port=3 actions=drop
- hard_timeout=14, in_port=4 actions=drop
+ hard_timeout=13, in_port=1 actions=drop
+ hard_timeout=16, in_port=2 actions=drop
+ hard_timeout=19, in_port=3 actions=drop
+ hard_timeout=22, in_port=4 actions=drop
NXST_FLOW reply:
])
# Sleep and modify the one that expires soonest
-sleep 2
+ovs-appctl time/warp 5000
AT_CHECK([ovs-ofctl mod-flows br0 in_port=1,actions=drop])
-sleep 2
+# At this point the table would looks like:
+# in_port seconds to expire
+# 1 13
+# 2 11
+# 3 14
+# 4 17
+ovs-appctl time/warp 2000
# Adding another flow will cause the one that expires soonest to be evicted.
AT_CHECK([ovs-ofctl add-flow br0 in_port=5,actions=drop])
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
- hard_timeout=11, in_port=1 actions=drop
- hard_timeout=13, in_port=3 actions=drop
- hard_timeout=14, in_port=4 actions=drop
+ hard_timeout=13, in_port=1 actions=drop
+ hard_timeout=19, in_port=3 actions=drop
+ hard_timeout=22, in_port=4 actions=drop
in_port=5 actions=drop
NXST_FLOW reply:
])
])
# Add 4 flows.
for in_port in 4 3 2 1; do
- ovs-ofctl add-flow br0 idle_timeout=1${in_port},in_port=$in_port,actions=drop
+ ovs-ofctl add-flow br0 idle_timeout=$((10 + in_port * 3)),in_port=$in_port,actions=drop
done
+ovs-appctl time/stop
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
- idle_timeout=11, in_port=1 actions=drop
- idle_timeout=12, in_port=2 actions=drop
- idle_timeout=13, in_port=3 actions=drop
- idle_timeout=14, in_port=4 actions=drop
+ idle_timeout=13, in_port=1 actions=drop
+ idle_timeout=16, in_port=2 actions=drop
+ idle_timeout=19, in_port=3 actions=drop
+ idle_timeout=22, in_port=4 actions=drop
NXST_FLOW reply:
])
# Sleep and receive on the flow that expires soonest
-sleep 2
+ovs-appctl time/warp 5000
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1)'])
-sleep 2
+# At this point the table would looks like:
+# in_port seconds to expire
+# 1 13
+# 2 11
+# 3 14
+# 4 17
+ovs-appctl time/warp 2000
# Adding another flow will cause the one that expires soonest to be evicted.
AT_CHECK([ovs-ofctl add-flow br0 in_port=5,actions=drop])
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
- idle_timeout=13, in_port=3 actions=drop
- idle_timeout=14, in_port=4 actions=drop
+ idle_timeout=19, in_port=3 actions=drop
+ idle_timeout=22, in_port=4 actions=drop
in_port=5 actions=drop
- n_packets=1, n_bytes=60, idle_timeout=11, in_port=1 actions=drop
+ n_packets=1, n_bytes=60, idle_timeout=13, in_port=1 actions=drop
NXST_FLOW reply:
])
OVS_VSWITCHD_STOP