Commit d3b41dd9 authored by Timothy Redaelli's avatar Timothy Redaelli Committed by Ben Pfaff

ovs-save: Use --bundle to restore flows (on OpenFlow 1.4+)

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: default avatarTimothy Redaelli <tredaelli@redhat.com>
Signed-off-by: default avatarBen Pfaff <blp@ovn.org>
Acked-by: default avatarFlavio Leitner <fbl@sysclose.org>
parent a694ead1
......@@ -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
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment