[ovs-dev] [PATCH] ovs-save: Use --bundle to restore flows (on OpenFlow 1.4+)
Flavio Leitner
fbl at sysclose.org
Fri Sep 22 23:09:45 UTC 2017
On Fri, 8 Sep 2017 13:03:48 +0200
Timothy Redaelli <tredaelli at redhat.com> wrote:
> If possible, use OpenFlow 1.4 atomic bundle transaction to restore flows.
> The patch uses also the 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\""
Where is $workdir set? Looks like it's empty and will use root fs.
Although this is a small patch, it actually does two things. One is
fixing to use highest enabled OF and another is replacing echo with
printf.
I suggest to split them apart so it's easier to review.
Thanks,
fbl
> +
> + # 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
> }
>
--
Flavio
More information about the dev
mailing list