[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