7163d4a466
Resolves: bz2011507 bz2011536 bz2011537 bz2012858 bz2019697 Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
152 lines
6.3 KiB
Diff
152 lines
6.3 KiB
Diff
From 3f0ec3e55e7dcec89dd7fad10084ea7f16178608 Mon Sep 17 00:00:00 2001
|
|
From: Salvatore Daniele <sdaniele@redhat.com>
|
|
Date: Tue, 7 Sep 2021 13:48:22 -0400
|
|
Subject: [PATCH 1/2] [openvswitch] add ovs default OpenFlow protocols
|
|
|
|
ovs-vsctl list bridge can return an empty 'protocol' column even when
|
|
there are OpenFlow protocols in place by default.
|
|
|
|
ovs-ofctl --version will return the range of supported ofp and should
|
|
also be used to ensure flow information for relevant protocol versions
|
|
is collected.
|
|
|
|
OpenFlow default versions:
|
|
https://docs.openvswitch.org/en/latest/faq/openflow/
|
|
|
|
Signed-off-by: Salvatore Daniele <sdaniele@redhat.com>
|
|
---
|
|
sos/report/plugins/openvswitch.py | 26 ++++++++++++++++++++++++++
|
|
1 file changed, 26 insertions(+)
|
|
|
|
diff --git a/sos/report/plugins/openvswitch.py b/sos/report/plugins/openvswitch.py
|
|
index cd897db2..92cc7259 100644
|
|
--- a/sos/report/plugins/openvswitch.py
|
|
+++ b/sos/report/plugins/openvswitch.py
|
|
@@ -206,6 +206,7 @@ class OpenVSwitch(Plugin):
|
|
|
|
# Gather additional output for each OVS bridge on the host.
|
|
br_list_result = self.collect_cmd_output("ovs-vsctl -t 5 list-br")
|
|
+ ofp_ver_result = self.collect_cmd_output("ovs-ofctl -t 5 --version")
|
|
if br_list_result['status'] == 0:
|
|
for br in br_list_result['output'].splitlines():
|
|
self.add_cmd_output([
|
|
@@ -232,6 +233,16 @@ class OpenVSwitch(Plugin):
|
|
"OpenFlow15"
|
|
]
|
|
|
|
+ # Flow protocol hex identifiers
|
|
+ ofp_versions = {
|
|
+ 0x01: "OpenFlow10",
|
|
+ 0x02: "OpenFlow11",
|
|
+ 0x03: "OpenFlow12",
|
|
+ 0x04: "OpenFlow13",
|
|
+ 0x05: "OpenFlow14",
|
|
+ 0x06: "OpenFlow15",
|
|
+ }
|
|
+
|
|
# List protocols currently in use, if any
|
|
ovs_list_bridge_cmd = "ovs-vsctl -t 5 list bridge %s" % br
|
|
br_info = self.collect_cmd_output(ovs_list_bridge_cmd)
|
|
@@ -242,6 +253,21 @@ class OpenVSwitch(Plugin):
|
|
br_protos_ln = line[line.find("[")+1:line.find("]")]
|
|
br_protos = br_protos_ln.replace('"', '').split(", ")
|
|
|
|
+ # If 'list bridge' yeilded no protocols, use the range of
|
|
+ # protocols enabled by default on this version of ovs.
|
|
+ if br_protos == [''] and ofp_ver_result['output']:
|
|
+ ofp_version_range = ofp_ver_result['output'].splitlines()
|
|
+ ver_range = []
|
|
+
|
|
+ for line in ofp_version_range:
|
|
+ if "OpenFlow versions" in line:
|
|
+ v = line.split("OpenFlow versions ")[1].split(":")
|
|
+ ver_range = range(int(v[0], 16), int(v[1], 16)+1)
|
|
+
|
|
+ for protocol in ver_range:
|
|
+ if protocol in ofp_versions:
|
|
+ br_protos.append(ofp_versions[protocol])
|
|
+
|
|
# Collect flow information for relevant protocol versions only
|
|
for flow in flow_versions:
|
|
if flow in br_protos:
|
|
--
|
|
2.31.1
|
|
|
|
|
|
From 5a006024f730213a726c70e82c5ecd2daf685b2b Mon Sep 17 00:00:00 2001
|
|
From: Salvatore Daniele <sdaniele@redhat.com>
|
|
Date: Tue, 7 Sep 2021 14:17:19 -0400
|
|
Subject: [PATCH 2/2] [openvswitch] add commands for offline analysis
|
|
|
|
Replicas of ovs-vswitchd and ovsdb-server can be recreated offline
|
|
using flow, group, and tlv dumps, and ovs conf.db. This allows for
|
|
offline anaylsis and the use of tools such as ovs-appctl
|
|
ofproto/trace and ovs-ofctl for debugging.
|
|
|
|
This patch ensures this information is available in the sos report.
|
|
The db is copied rather than collected using ovsdb-client list dump
|
|
for two reasons:
|
|
|
|
ovsdb-client requires interacting with the ovsdb-server which could
|
|
take it 'down' for some time, and impact large, busy clusters.
|
|
|
|
The list-dump is not in a format that can be used to restore the db
|
|
offline. All of the information in the list dump is available and more
|
|
by copying the db.
|
|
|
|
Signed-off-by: Salvatore Daniele <sdaniele@redhat.com>
|
|
---
|
|
sos/report/plugins/openvswitch.py | 12 ++++++++++--
|
|
sos/report/plugins/ovn_central.py | 1 +
|
|
2 files changed, 11 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/sos/report/plugins/openvswitch.py b/sos/report/plugins/openvswitch.py
|
|
index 92cc7259..003596c6 100644
|
|
--- a/sos/report/plugins/openvswitch.py
|
|
+++ b/sos/report/plugins/openvswitch.py
|
|
@@ -75,12 +75,19 @@ class OpenVSwitch(Plugin):
|
|
"/run/openvswitch/ovs-monitor-ipsec.pid"
|
|
])
|
|
|
|
+ self.add_copy_spec([
|
|
+ path_join('/usr/local/etc/openvswitch', 'conf.db'),
|
|
+ path_join('/etc/openvswitch', 'conf.db'),
|
|
+ path_join('/var/lib/openvswitch', 'conf.db'),
|
|
+ ])
|
|
+ ovs_dbdir = environ.get('OVS_DBDIR')
|
|
+ if ovs_dbdir:
|
|
+ self.add_copy_spec(path_join(ovs_dbdir, 'conf.db'))
|
|
+
|
|
self.add_cmd_output([
|
|
# The '-t 5' adds an upper bound on how long to wait to connect
|
|
# to the Open vSwitch server, avoiding hangs when running sos.
|
|
"ovs-vsctl -t 5 show",
|
|
- # Gather the database.
|
|
- "ovsdb-client -f list dump",
|
|
# List the contents of important runtime directories
|
|
"ls -laZ /run/openvswitch",
|
|
"ls -laZ /dev/hugepages/",
|
|
@@ -276,6 +283,7 @@ class OpenVSwitch(Plugin):
|
|
"ovs-ofctl -O %s dump-groups %s" % (flow, br),
|
|
"ovs-ofctl -O %s dump-group-stats %s" % (flow, br),
|
|
"ovs-ofctl -O %s dump-flows %s" % (flow, br),
|
|
+ "ovs-ofctl -O %s dump-tlv-map %s" % (flow, br),
|
|
"ovs-ofctl -O %s dump-ports-desc %s" % (flow, br)
|
|
])
|
|
|
|
diff --git a/sos/report/plugins/ovn_central.py b/sos/report/plugins/ovn_central.py
|
|
index a4c483a9..d6647aad 100644
|
|
--- a/sos/report/plugins/ovn_central.py
|
|
+++ b/sos/report/plugins/ovn_central.py
|
|
@@ -138,6 +138,7 @@ class OVNCentral(Plugin):
|
|
os.path.join('/usr/local/etc/openvswitch', dbfile),
|
|
os.path.join('/etc/openvswitch', dbfile),
|
|
os.path.join('/var/lib/openvswitch', dbfile),
|
|
+ os.path.join('/var/lib/ovn/etc', dbfile),
|
|
])
|
|
if ovs_dbdir:
|
|
self.add_copy_spec(os.path.join(ovs_dbdir, dbfile))
|
|
--
|
|
2.31.1
|
|
|