[ovs-dev] [PATCH] ovs-save: Use --bundle to restore flows (on OpenFlow 1.4+)
Timothy Redaelli
tredaelli at redhat.com
Fri Sep 8 11:03:48 UTC 2017
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 ovs-save fails, this patch also fixes that.
Replaced "echo -n" with "printf" since "echo -n" is not POSIX and may
not work with some shells.
Signed-off-by: Timothy Redaelli <tredaelli at redhat.com>
---
This is a pre-requisite for the new patchset of patch with patchwok id 799223
---
utilities/ovs-save | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/utilities/ovs-save b/utilities/ovs-save
index 8b8dbf421..3cfa4c870 100755
--- a/utilities/ovs-save
+++ b/utilities/ovs-save
@@ -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,16 +111,26 @@ save_flows () {
fi
for bridge in "$@"; do
- echo -n "ovs-ofctl add-tlv-map ${bridge} '"
- ovs-ofctl dump-tlv-map ${bridge} | \
+ # Get the highest enabled OpenFlow version
+ ofp_version=$(get_highest_ofp_version "$bridge")
+
+ printf "ovs-ofctl -O $ofp_version add-tlv-map %s '" "$bridge"
+ ovs-ofctl -O $ofp_version 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 "EOF"
+ printf "%s" "ovs-ofctl -O $ofp_version add-flows $bridge \
+ \"$workdir/$bridge.flows.dump\""
+
+ # If possible, use OpenFlow 1.4 atomic bundle transaction to add flows
+ [ ${ofp_version#OpenFlow} -ge 14 ] && echo " --bundle"
+
+ 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' \
+ > "$workdir/$bridge.flows.dump"
done
}
--
2.13.5
More information about the dev
mailing list