This series is based on the ofenflow and datapath flow parsing library
series [1].
This series introduces a python tool called "ovs-ofparse". This tool
aims to make it much more easy to analyze and troubleshoot issues
involving openflow or datapath flows.
It is essentially a CLI program that reads one or more flow dumps
(produced by "ovs-ofproto dump-flows" or "ovs-dpctl dump-flows" and
prints the flows back in different formats. The version I'm sending
contains quite some functionality and, although I've received overall
good feedback from some collegues, it might be too much to add to the
ovs-tree. We can select what formats or features are more desireable.
Currently the tool supports:
* Filtering based on complex filtering expressions defined in [1]
* Multi-input file support ("-i " option can be added multiple times).
If such option is not provided, stdin will be read
* Extensive formatting system
- Users can define what color to use to print any key and value based
on the key name or value type
- Users can define their own styles and switch between them using a
command line option
- Users can pass any filtering expression and the matching keys will
be highlighted (the style of highlighted key/values is also
configurable)
- Supports creating heat-map palletes: users can print the n_packets,
n_bytes keys using a color that depends on its relative value (blue
for small, red for high, passing through green and cyan)
* Formats:
- Console: prints the flows in the console using styles
- Logic: prints the logical representation of the flow list. Output
depends on the flow type:
+ Openflow: a logical openflow flow (nothing to do with OVN
LogicalFlow) is composed of flows that share the same priority and
table, have the same set of keys in the match section,
regardless of their values, and the same set of keys in their
actions, regardless of their value (except for output and resubmit
for which the values do matter). Cookies can be optionally also
considered for the logical flow construction.
Logical flows make for a more collapse output (which can be
optionally expanded using "--show-flows" option).
+ Datapath: Logical datapath format prints datapath flows in a
tree based on their recirc_id
- HTML: prints a html flow table with some minimal interactivity
- JSON: prints the flows in json format
Some future development planned:
- Integration with OVN: Automatically call ovn-detrace on each cookie to
support printing the OVN information about each flow or set of flows
The tool is based on two main dependencies:
- 'click' for command line management
- 'rich' for rich console output
Testing notes
-------------
(optionally create a venv)
$ cd python; pip install .
$ ovs-ofparse --help
[1] https://patchwork.ozlabs.org/project/openvswitch/list/?series=273222
Adrian Moreno (10):
python: introduce scheleton of ovs_ofparse utility
python/ovs-ofparse: Create basic flow processing
python/ovs-ofparse: add formatting framework
python/ovs-ofparse: add json format
python/ovs-ofparse: Add rich console formatting
python/ovs-ofparse: add openflow logic processing
python/ovs-ofparse: add datapath logic processing
python/ovs-ofparse: add html formatter
python/ovs-ofparse: add openflow html format
python:ovs-ofparse: add datapath html format
python/automake.mk | 19 +-
python/ovs/ovs_ofparse/__init__.py | 2 +
python/ovs/ovs_ofparse/console.py | 206 ++++++++++
python/ovs/ovs_ofparse/datapath.py | 422 ++++++++++++++++++++
python/ovs/ovs_ofparse/dp_tree.py | 128 ++++++
python/ovs/ovs_ofparse/etc/ovs-ofparse.conf | 85 ++++
python/ovs/ovs_ofparse/format.py | 319 +++++++++++++++
python/ovs/ovs_ofparse/html.py | 125 ++++++
python/ovs/ovs_ofparse/main.py | 181 +++++++++
python/ovs/ovs_ofparse/ofp_logic.py | 210 ++++++++++
python/ovs/ovs_ofparse/openflow.py | 162 ++++++++
python/ovs/ovs_ofparse/ovs-ofparse | 6 +
python/ovs/ovs_ofparse/process.py | 195 +++++++++
python/setup.py | 13 +-
14 files changed, 2069 insertions(+), 4 deletions(-)
create mode 100644 python/ovs/ovs_ofparse/__init__.py
create mode 100644 python/ovs/ovs_ofparse/console.py
create mode 100644 python/ovs/ovs_ofparse/datapath.py
create mode 100644 python/ovs/ovs_ofparse/dp_tree.py
create mode 100644 python/ovs/ovs_ofparse/etc/ovs-ofparse.conf
create mode 100644 python/ovs/ovs_ofparse/format.py
create mode 100644 python/ovs/ovs_ofparse/html.py
create mode 100644 python/ovs/ovs_ofparse/main.py
create mode 100644 python/ovs/ovs_ofparse/ofp_logic.py
create mode 100644 python/ovs/ovs_ofparse/openflow.py
create mode 100755 python/ovs/ovs_ofparse/ovs-ofparse
create mode 100644 python/ovs/ovs_ofparse/process.py
--
2.31.1
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev