]> git.proxmox.com Git - ovs.git/commitdiff
ovs-save: Use --bundle to restore flows (on OpenFlow 1.4+)
authorTimothy Redaelli <tredaelli@redhat.com>
Mon, 25 Sep 2017 14:44:04 +0000 (16:44 +0200)
committerBen Pfaff <blp@ovn.org>
Fri, 27 Oct 2017 16:51:46 +0000 (09:51 -0700)
If possible, use OpenFlow 1.4 atomic bundle transaction to restore flows.
The patch uses also the highest enabled OpenFlow version to do the queries.

With the actual implementation, if you have the default OpenFlow version
disabled then ovs-save fails. This patch also fixes that problem.

Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Flavio Leitner <fbl@sysclose.org>
utilities/ovs-save

index 8b8dbf42158b797a11f58ea764d95a7db1e84a3f..fc9418c3dd768f63e0f05d0f18b6a5abc2a43072 100755 (executable)
@@ -99,6 +99,11 @@ save_interfaces () {
     fi
 }
 
+get_highest_ofp_version() {
+    ovs-vsctl get bridge "$1" protocols | \
+        awk -F '"' '{ print (NF>1)? $(NF-1) : "OpenFlow14" }'
+}
+
 save_flows () {
     if (ovs-ofctl --version) > /dev/null 2>&1; then :; else
         echo "$0: ovs-ofctl not found in $PATH" >&2
@@ -106,15 +111,26 @@ save_flows () {
     fi
 
     for bridge in "$@"; do
+        # Get the highest enabled OpenFlow version
+        ofp_version=$(get_highest_ofp_version "$bridge")
+
         echo -n "ovs-ofctl add-tlv-map ${bridge} '"
         ovs-ofctl dump-tlv-map ${bridge} | \
         awk '/^ 0x/ {if (cnt != 0) printf ","; \
              cnt++;printf "{class="$1",type="$2",len="$3"}->"$4}'
         echo "'"
 
-        echo "ovs-ofctl add-flows ${bridge} - << EOF"
-        ovs-ofctl dump-flows "${bridge}" | sed -e '/NXST_FLOW/d' \
-            -e 's/\(idle\|hard\)_age=[^,]*,//g'
+        echo -n "ovs-ofctl -O $ofp_version add-flows ${bridge} "
+
+        # If possible, use OpenFlow 1.4 atomic bundle transaction to add flows
+        [ ${ofp_version#OpenFlow} -ge 14 ] && echo -n "--bundle "
+
+        echo  "- << EOF"
+
+        ovs-ofctl -O $ofp_version dump-flows --no-names --no-stats "$bridge" | \
+            sed -e '/NXST_FLOW/d' \
+                -e '/OFPST_FLOW/d' \
+                -e 's/\(idle\|hard\)_age=[^,]*,//g'
         echo "EOF"
     done
 }