On Tue, Mar 21, 2017 at 12:21 PM, Han Zhou <[email protected]> wrote:
>
> A python script to decode ofproto/trace output to add ovn lflow
> information inline.
>
> Signed-off-by: Han Zhou <[email protected]>
> ---
>  manpages.mk                    |  4 ++
>  ovn/utilities/automake.mk      | 15 +++++--
>  ovn/utilities/ovn-detrace.1.in | 29 +++++++++++++
>  ovn/utilities/ovn-detrace.in   | 94
++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 138 insertions(+), 4 deletions(-)
>  create mode 100644 ovn/utilities/ovn-detrace.1.in
>  create mode 100755 ovn/utilities/ovn-detrace.in
>
> diff --git a/manpages.mk b/manpages.mk
> index 742bd66..ced19c0 100644
> --- a/manpages.mk
> +++ b/manpages.mk
> @@ -1,5 +1,9 @@
>  # Generated automatically -- do not modify!    -*- buffer-read-only: t
-*-
>
> +ovn/utilities/ovn-detrace.py: \
> +       ovn/utilities/ovn-detrace.py.in
> +ovn/utilities/ovn-detrace.py.in:
> +
>  ovn/utilities/ovn-sbctl.8: \
>         ovn/utilities/ovn-sbctl.8.in \
>         lib/common.man \
> diff --git a/ovn/utilities/automake.mk b/ovn/utilities/automake.mk
> index 08e48ea..b96f9bf 100644
> --- a/ovn/utilities/automake.mk
> +++ b/ovn/utilities/automake.mk
> @@ -6,14 +6,18 @@ man_MANS += \
>      ovn/utilities/ovn-ctl.8 \
>      ovn/utilities/ovn-nbctl.8 \
>      ovn/utilities/ovn-sbctl.8 \
> -    ovn/utilities/ovn-trace.8
> +    ovn/utilities/ovn-trace.8 \
> +    ovn/utilities/ovn-detrace.1
>
> -MAN_ROOTS += ovn/utilities/ovn-sbctl.8.in
> +MAN_ROOTS += \
> +    ovn/utilities/ovn-sbctl.8.in \
> +    ovn/utilities/ovn-detrace.1.in
>
>  # Docker drivers
>  bin_SCRIPTS += \
>      ovn/utilities/ovn-docker-overlay-driver \
> -    ovn/utilities/ovn-docker-underlay-driver
> +    ovn/utilities/ovn-docker-underlay-driver \
> +    ovn/utilities/ovn-detrace
>
>  EXTRA_DIST += \
>      ovn/utilities/ovn-ctl \
> @@ -22,13 +26,16 @@ EXTRA_DIST += \
>      ovn/utilities/ovn-docker-underlay-driver \
>      ovn/utilities/ovn-nbctl.8.xml \
>      ovn/utilities/ovn-trace.8.xml \
> +    ovn/utilities/ovn-detrace.in \
>      ovn/utilities/ovndb-servers.ocf
>
>  CLEANFILES += \
>      ovn/utilities/ovn-ctl.8 \
>      ovn/utilities/ovn-nbctl.8 \
>      ovn/utilities/ovn-sbctl.8 \
> -    ovn/utilities/ovn-trace.8
> +    ovn/utilities/ovn-trace.8 \
> +    ovn/utilities/ovn-detrace.1 \
> +    ovn/utilities/ovn-detrace
>
>  # ovn-nbctl
>  bin_PROGRAMS += ovn/utilities/ovn-nbctl
> diff --git a/ovn/utilities/ovn-detrace.1.in b/ovn/utilities/
ovn-detrace.1.in
> new file mode 100644
> index 0000000..2f74fd7
> --- /dev/null
> +++ b/ovn/utilities/ovn-detrace.1.in
> @@ -0,0 +1,29 @@
> +.TH ovn\-detrace 1 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
> +.
> +.SH NAME
> +ovn\-detrace \- convert ``ovs\-appctl ofproto/trace'' output to combine
> +OVN logical flow information.
> +.
> +.SH SYNOPSIS
> +\fBovn\-detrace < \fIfile\fR
> +.so lib/common-syn.man
> +.
> +.SH DESCRIPTION
> +The \fBovn\-detrace\fR program reads \fBovs\-appctl ofproto/trace\fR
output on
> +stdin, looking for cookies, and expand each cookie with corresponding
OVN logical
> +flows.
> +.PP
> +.
> +.SH "OPTIONS"
> +.so lib/common.man
> +.
> +.IP "\fB\-\-db=\fIserver\fR"
> +The OVSDB database remote to contact.  If the \fBOVN_SB_DB\fR
> +environment variable is set, its value is used as the default.
> +Otherwise, the default is \fBunix:@RUNDIR@/db.sock\fR, but this
> +default is unlikely to be useful outside of single-machine OVN test
> +environments.
> +.
> +.SH "SEE ALSO"
> +.
> +.BR ovs\-appctl (8), ovn\-sbctl (8), ovn\-trace (8)
> diff --git a/ovn/utilities/ovn-detrace.in b/ovn/utilities/ovn-detrace.in
> new file mode 100755
> index 0000000..ea85484
> --- /dev/null
> +++ b/ovn/utilities/ovn-detrace.in
> @@ -0,0 +1,94 @@
> +#! /usr/bin/env @PYTHON@
> +#
> +# Copyright (c) 2017 eBay Inc.
> +#
> +# Licensed under the Apache License, Version 2.0 (the "License");
> +# you may not use this file except in compliance with the License.
> +# You may obtain a copy of the License at:
> +#
> +#     http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
> +# See the License for the specific language governing permissions and
> +# limitations under the License.
> +
> +import getopt
> +import re
> +import subprocess
> +import sys
> +
> +argv0 = sys.argv[0]
> +
> +
> +def usage():
> +    print """\
> +%(argv0)s:
> +usage: %(argv0)s < FILE
> +where FILE is output from ovs-appctl ofproto/trace.
> +
> +The following options are also available:
> +  -h, --help                  display this help message
> +  -V, --version               display version information
> +  --db=DATABASE               connect to DATABASE\
> +""" % {'argv0': argv0}
> +    sys.exit(0)
> +
> +
> +def reformat(lflow):
> +    return re.sub(r'\s+[,\)]', '', lflow, 0)
> +
> +
> +def main():
> +    try:
> +        options, args = getopt.gnu_getopt(sys.argv[1:], 'hV',
> +                                          ['help', 'version', 'db='])
> +    except getopt.GetoptError, geo:
> +        sys.stderr.write("%s: %s\n" % (argv0, geo.msg))
> +        sys.exit(1)
> +
> +    db_opt = None
> +    for key, value in options:
> +        if key in ['-h', '--help']:
> +            usage()
> +        elif key in ['-V', '--version']:
> +            print "%s (Open vSwitch) @VERSION@" % argv0
> +        elif key in ['--db']:
> +            db_opt = key + '=' + value
> +        else:
> +            sys.exit(0)
> +
> +    if len(args) != 0:
> +        sys.stderr.write("%s: non-option argument not supported "
> +                         "(use --help for help)\n" % argv0)
> +        sys.exit(1)
> +
> +    regex = re.compile(r'^.*cookie 0x([0-9a-fA-F]+)')
> +    while True:
> +        line = sys.stdin.readline()
> +        print line.strip()
> +        if line == "":
> +            break
> +
> +        m = regex.match(line)
> +        if m:
> +            cookie = m.group(1)
> +            cmd_args = ['ovn-sbctl']
> +            if db_opt:
> +                cmd_args.append(db_opt)
> +            cmd_args.extend(['lflow-list', cookie])
> +            lflow = subprocess.check_output(cmd_args)
> +            if lflow:
> +                for l in lflow.splitlines():
> +                    l = reformat(l)
> +                    print "\t* " + l
> +
> +
> +if __name__ == "__main__":
> +    main()
> +
> +
> +# Local variables:
> +# mode: python
> +# End:
> --
> 2.1.0
>

This patch is abandoned and replaced by below patch series, which expand
ovs flows not only to logical flows but also to ACLs:

https://mail.openvswitch.org/pipermail/ovs-dev/2017-March/330143.html
https://mail.openvswitch.org/pipermail/ovs-dev/2017-March/330144.html
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to