ofproto: Fix potential leak during flow mods.
[sliver-openvswitch.git] / tests / ofproto.at
index e98b526..dfa8915 100644 (file)
@@ -38,8 +38,8 @@ n_tables:254, n_buffers:256
 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
 ])
@@ -68,8 +68,8 @@ actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_N
      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
 ])
@@ -109,8 +109,8 @@ AT_CHECK([ovs-ofctl -vwarn dump-ports-desc br0], [0], [stdout])
 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
@@ -124,8 +124,8 @@ AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-ports-desc br0], [0], [stdout])
 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
@@ -1375,27 +1375,34 @@ AT_CHECK(
    | ${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:
 ])
@@ -1414,26 +1421,33 @@ AT_CHECK(
 ])
 # 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
@@ -2140,6 +2154,9 @@ fi
 queue_size=`expr $rmem_max + 128 \* 1024`
 echo rmem_max=$rmem_max queue_size=$queue_size
 
+# If there's too much queuing skip the test to avoid timing out.
+AT_SKIP_IF([test $rmem_max -gt 1048576])
+
 # Each flow update message takes up at least 48 bytes of space in queues
 # and in practice more than that.
 n_msgs=`expr $queue_size / 48`