diff -pruN 3.9.1-1/debian/changelog 3.9.1-1ubuntu4/debian/changelog
--- 3.9.1-1/debian/changelog	2020-06-16 12:18:58.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/changelog	2020-07-27 13:19:05.000000000 +0000
@@ -1,4 +1,45 @@
-sosreport (3.9.1-1) unstable; urgency=medium
+sosreport (3.9.1-1ubuntu4) groovy; urgency=medium
+
+  * Openvswitch plugin update: (LP: #1888854)
+    - d/p/0013-ovs-only-check-mempool-info-for-dpdk-init-true.patch
+    - d/p/0014-ovs-add-support-for-openflow-1.4-and-1.5.patch
+    - d/p/0015-ovs-pull-additional-bridge-info.patch
+    - d/p/0016-ovs-capture-all-datapath-data.patch
+    - d/p/0017-ovs-ensure-t-5-for-ovs-vsctl-where-needed.patch
+    - d/p/0018-ovs-list-important-dpdk-related-dir.patch
+    - d/p/0019-ovs-add-lacp-stats.patch
+    - d/p/0020-ovs-pull-cfm-qos-and-bond-info.patch
+    - d/p/0021-ovs-poll-dpdk-status-from-ifaces-and-ports.patch
+
+ -- Eric Desrochers <eric.desrochers@canonical.com>  Mon, 27 Jul 2020 13:19:05 +0000
+
+sosreport (3.9.1-1ubuntu3) groovy; urgency=medium
+
+  * Various plugin updates (LP: #1888403)
+    - d/p/0005-maas-use-maas-region-instead-of-deprecated-cmd.patch
+    - d/p/0006-systemd-update-trigger.patch
+    - d/p/0007-drbd-add-new-plugin.patch
+    - d/p/0008-networking-produce-numbered-ufw-rule.patch
+    - d/p/0009-ubuntu-support-status-command-update.patch
+    - d/p/0010-pacemaker-fix-password-with-equal-sign.patch
+    - d/p/0011-k8s-add-support-for-alternate-ubuntu-deployments.patch
+    - d/p/0012-networking-collect-iptables-when-proper-kernel-modules-loaded.patch
+
+  * Rename existing quilt patch to follow standard:
+    - From "0001-lshw-command.patch" to "0001-hardware-lshw-command.patch"
+
+ -- Eric Desrochers <eric.desrochers@canonical.com>  Tue, 21 Jul 2020 16:43:20 +0000
+
+sosreport (3.9.1-1ubuntu2) groovy; urgency=medium
+
+  * d/p/0004-maas-add-snap-support.patch (LP: #1886494)
+    From 2.7.0 onwards, MAAS is using snaps for it's
+    releases, and this changes the location of files
+    and logs.
+
+ -- Eric Desrochers <eric.desrochers@canonical.com>  Mon, 06 Jul 2020 16:20:29 +0000
+
+sosreport (3.9.1-1ubuntu1) groovy; urgency=medium
 
   * New 3.9.1 upstream release.
     This maintenance release includes:
@@ -22,19 +63,44 @@ sosreport (3.9.1-1) unstable; urgency=me
 
   * Former patches now fixed upstream:
     - d/p/0001-unittest-py3-fix.patch
+    - d/p/0002-lxd-drop-db-collection-and-introduce-lxd-buginfo.patch
 
   * Other specific modifications:
-    - Include simple.sh, an upstream port of the travis test to bash,
-      as part of the package autopkgtest.
+    - d/p/0001-lshw-command.patch
+    - d/p/0002-lds-substitute-oidc-conf.patch
+    - d/p/0003-kvm-change-trigger-to-dev-kvm.patch
 
  -- Eric Desrochers <slashd@ubuntu.com>  Tue, 16 Jun 2020 12:18:58 +0000
 
-sosreport (3.9-2) unstable; urgency=medium
+sosreport (3.9-1ubuntu3) groovy; urgency=low
+
+  * d/p/0003-lshw-command.patch: (LP: #1871494)
+    - Add `lshw` command to hardware plugin
+
+  [Eric Desrochers]
+  * d/p/0004-lds-substitute-oidc-conf.patch:
+    - landscape substitute oidc conf
+      in service file (LP: #1874526)
+
+ -- Heather Lemon <heather.lemon@canonical.com>  Mon, 27 Apr 2020 09:33:16 -0600
+
+sosreport (3.9-1ubuntu2) focal; urgency=medium
+
+  * d/p/0002-lxd-drop-db-collection-and-introduce-lxd-buginfo.patch:
+    - Drop db collection and introduce lxd.buginfo (LP: #1868215)
+
+  * d/tests/{control,simple.sh}: (LP: #1865212)
+    - Add testsuite "simple.sh". A port of the travis tests to bash
+      provided by upstream.
+
+ -- Seyeong Kim <seyeong.kim@canonical.com>  Fri, 20 Mar 2020 06:48:01 +0000
+
+sosreport (3.9-1ubuntu1) focal; urgency=medium
 
   * debian/control:
     Drop accidentally re-introduces py2 runtime dependency
 
- -- Eric Desrochers <slashd@ubuntu.com>  Mon, 17 Feb 2020 12:50:37 +0000
+ -- Eric Desrochers <eric.desrochers@canonical.com>  Mon, 17 Feb 2020 07:28:29 -0500
 
 sosreport (3.9-1) unstable; urgency=medium
 
diff -pruN 3.9.1-1/debian/patches/0001-hardware-lshw-command.patch 3.9.1-1ubuntu4/debian/patches/0001-hardware-lshw-command.patch
--- 3.9.1-1/debian/patches/0001-hardware-lshw-command.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0001-hardware-lshw-command.patch	2020-06-16 12:18:58.000000000 +0000
@@ -0,0 +1,25 @@
+From 2dd5cd45a8381fa36ea99c85b526f9d79e526d91 Mon Sep 17 00:00:00 2001
+From: Jose Castillo <jcastillo@redhat.com>
+Date: Wed, 1 Apr 2020 18:50:57 +0200
+Subject: [hardware] Add output of lshw
+ This plugin adds the output of the command
+ lshw, and its output complements what we
+ already collect with dmidecode.
+
+Signed-off-by: Jose Castillo <jcastillo@redhat.com>
+Origin: upstream, https://github.com/sosreport/sos/commit/2dd5cd45a8381fa36ea99c85b526f9d79e526d91
+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1871494
+---
+ sos/plugins/hardware.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sos/plugins/hardware.py
++++ b/sos/plugins/hardware.py
+@@ -29,6 +29,7 @@
+         ])
+ 
+         self.add_cmd_output("dmidecode", root_symlink="dmidecode")
++        self.add_cmd_output("lshw")
+ 
+ 
+ # vim: set et ts=4 sw=4 :
diff -pruN 3.9.1-1/debian/patches/0002-lds-substitute-oidc-conf.patch 3.9.1-1ubuntu4/debian/patches/0002-lds-substitute-oidc-conf.patch
--- 3.9.1-1/debian/patches/0002-lds-substitute-oidc-conf.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0002-lds-substitute-oidc-conf.patch	2020-06-16 12:18:58.000000000 +0000
@@ -0,0 +1,55 @@
+Description: [landscape] Substitute oidc conf in service file
+ Substitute sensitive information about oidc
+ found in landscape service configuration file.
+
+ From release 19.10, Landscape can use OpenID-Connect
+ (OIDC) to authenticate users. To enable OpenID-Connect
+ support, please add oidc-issuer, oidc-client-id and
+ oidc-client-secret to /etc/landscape/service.conf in
+ the [landscape] section.
+
+ Reference:
+ https://docs.ubuntu.com/landscape/en/onprem-auth#openid-connect-support
+
+ Resolves: #2023
+Author: Eric Desrochers <eric.desrochers@canonical.com>
+Origin: upstream, https://github.com/sosreport/sos/pull/2025/commits/0c4d821e26e1206a0b99f427b572931ba2fd9bb5
+Bug: https://github.com/sosreport/sos/issues/2023
+Bug-Ubuntu: https://launchpad.net/bugs/1874526
+Index: sosreport-3.9/sos/plugins/landscape.py
+===================================================================
+--- sosreport-3.9.orig/sos/plugins/landscape.py
++++ sosreport-3.9/sos/plugins/landscape.py
+@@ -57,6 +57,16 @@ class Landscape(Plugin, UbuntuPlugin):
+             r"secret-token = [********]"
+         )
+         self.do_file_sub(
++            "/etc/landscape/service.conf",
++            r"oidc-client-secret = (.*)",
++            r"oidc-client-secret = [********]"
++        )
++        self.do_file_sub(
++            "/etc/landscape/service.conf",
++            r"oidc-client-id = (.*)",
++            r"oidc-client-id = [********]"
++        )
++        self.do_file_sub(
+             "/etc/landscape/service.conf.old",
+             r"password = (.*)",
+             r"password = [********]"
+@@ -71,5 +81,15 @@ class Landscape(Plugin, UbuntuPlugin):
+             r"secret-token = (.*)",
+             r"secret-token = [********]"
+         )
++        self.do_file_sub(
++            "/etc/landscape/service.conf.old",
++            r"oidc-client-secret = (.*)",
++            r"oidc-client-secret = [********]"
++        )
++        self.do_file_sub(
++            "/etc/landscape/service.conf.old",
++            r"oidc-client-id = (.*)",
++            r"oidc-client-id = [********]"
++        )
+ 
+ # vim: set et ts=4 sw=4 :
diff -pruN 3.9.1-1/debian/patches/0003-kvm-change-trigger-to-dev-kvm.patch 3.9.1-1ubuntu4/debian/patches/0003-kvm-change-trigger-to-dev-kvm.patch
--- 3.9.1-1/debian/patches/0003-kvm-change-trigger-to-dev-kvm.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0003-kvm-change-trigger-to-dev-kvm.patch	2020-06-16 12:18:58.000000000 +0000
@@ -0,0 +1,38 @@
+Description: [kvm] change check_enabled to /dev/kvm
+ The KVM plugin get triggered in a container
+ (e.g lxd) because of "/sys/module/kvm"
+ inheritance from the kernel host.
+
+ Not only it's a waste of sosreport time,
+ but running it inside a container may
+ unintentionnaly reveal details from its
+ host. Which is a undesired behaviour.
+
+ Switching to /dev/kvm, is more appropriate
+ and follow current standard as used by tool
+ such as cpu-checker (kvm-ok) for instance.
+
+ And taking benefit of this change to get rid
+ of the check_enabled() overwrite in favor of
+ using "files=" trigger.
+
+ Closes: #2062
+
+Author: Eric Desrochers <eric.desrochers@canonical.com>
+Origin: upstream, https://github.com/sosreport/sos/pull/2063/commits/dc58a038c18ff3e838d883d4b31aad5dac7ea9e1
+Bug: https://github.com/sosreport/sos/issues/2062
+Index: sosreport-3.9.1/sos/plugins/kvm.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/kvm.py
++++ sosreport-3.9.1/sos/plugins/kvm.py
+@@ -19,9 +19,7 @@ class Kvm(Plugin, RedHatPlugin, DebianPl
+ 
+     plugin_name = 'kvm'
+     profiles = ('system', 'virt')
+-
+-    def check_enabled(self):
+-        return os.access("/sys/module/kvm", os.R_OK)
++    files = ('/dev/kvm',)
+ 
+     def setup(self):
+         self.add_copy_spec([
diff -pruN 3.9.1-1/debian/patches/0004-maas-add-snap-support.patch 3.9.1-1ubuntu4/debian/patches/0004-maas-add-snap-support.patch
--- 3.9.1-1/debian/patches/0004-maas-add-snap-support.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0004-maas-add-snap-support.patch	2020-07-06 16:18:53.000000000 +0000
@@ -0,0 +1,113 @@
+From 1417827a9efd84860cb9e30a449faff7d55bb4fb Mon Sep 17 00:00:00 2001
+From: Adam Collard <adam.collard@canonical.com>
+Date: Fri, 21 Feb 2020 14:09:19 +0000
+Subject: [PATCH] [maas] Add snap support to maas plugin
+
+From 2.7.0 onwards, MAAS is using snaps for it's releases, and this
+changes the location of files and logs.
+
+Resolves: #1964
+
+Signed-off-by: Adam Collard <adam.collard@canonical.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/maas.py | 65 ++++++++++++++++++++++++++++++--------
+ 1 file changed, 51 insertions(+), 14 deletions(-)
+
+Index: sosreport-3.9.1/sos/plugins/maas.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/maas.py
++++ sosreport-3.9.1/sos/plugins/maas.py
+@@ -20,13 +20,16 @@ class Maas(Plugin, UbuntuPlugin):
+     packages = ('maas', 'maas-common')
+ 
+     services = (
++        # For the deb:
+         'maas-dhcpd',
+         'maas-dhcpd6',
+         'maas-http',
+         'maas-proxy',
+         'maas-rackd',
+         'maas-regiond',
+-        'maas-syslog'
++        'maas-syslog',
++        # For the snap:
++        'snap.maas.supervisor',
+     )
+ 
+     option_list = [
+@@ -52,19 +55,49 @@ class Maas(Plugin, UbuntuPlugin):
+ 
+         return ret['status'] == 0
+ 
++    def _is_snap_installed(self):
++        return self.exec_cmd('snap list maas')["status"] == 0
++
++    def check_enabled(self):
++        if super().check_enabled():
++            # deb-based MAAS and existing triggers
++            return True
++        # Do we have the snap installed?
++        return self._is_snap_installed()
++
+     def setup(self):
+-        self.add_copy_spec([
+-            "/etc/squid-deb-proxy",
+-            "/etc/maas",
+-            "/var/lib/maas/dhcp*",
+-            "/var/log/apache2*",
+-            "/var/log/maas*",
+-            "/var/log/upstart/maas-*",
+-        ])
+-        self.add_cmd_output([
+-            "apt-cache policy maas-*",
+-            "apt-cache policy python-django-*",
+-        ])
++        self._is_snap = self._is_snap_installed()
++        if self._is_snap:
++            self.add_cmd_output([
++                'snap info maas',
++                'maas status'
++            ])
++            # Don't send secrets
++            self.add_forbidden_path("/var/snap/maas/current/bind/session.key")
++            self.add_copy_spec([
++                "/var/snap/maas/common/log",
++                "/var/snap/maas/common/snap_mode",
++                "/var/snap/maas/current/*.conf",
++                "/var/snap/maas/current/bind",
++                "/var/snap/maas/current/http",
++                "/var/snap/maas/current/supervisord",
++                "/var/snap/maas/current/preseeds",
++                "/var/snap/maas/current/proxy",
++                "/var/snap/maas/current/rsyslog",
++            ])
++        else:
++            self.add_copy_spec([
++                "/etc/squid-deb-proxy",
++                "/etc/maas",
++                "/var/lib/maas/dhcp*",
++                "/var/log/apache2*",
++                "/var/log/maas*",
++                "/var/log/upstart/maas-*",
++            ])
++            self.add_cmd_output([
++                "apt-cache policy maas-*",
++                "apt-cache policy python-django-*",
++            ])
+ 
+         for service in self.services:
+             self.add_journal(units=service)
+@@ -83,7 +116,11 @@ class Maas(Plugin, UbuntuPlugin):
+                     "Cannot login into MAAS remote API with provided creds.")
+ 
+     def postproc(self):
+-        self.do_file_sub("/etc/maas/regiond.conf",
++        if self._is_snap:
++            regiond_path = "/var/snap/maas/current/maas/regiond.conf"
++        else:
++            regiond_path = "/etc/maas/regiond.conf"
++        self.do_file_sub(regiond_path,
+                          r"(database_pass\s*:\s*)(.*)",
+                          r"\1********")
+ 
diff -pruN 3.9.1-1/debian/patches/0005-maas-use-maas-region-instead-of-deprecated-cmd.patch 3.9.1-1ubuntu4/debian/patches/0005-maas-use-maas-region-instead-of-deprecated-cmd.patch
--- 3.9.1-1/debian/patches/0005-maas-use-maas-region-instead-of-deprecated-cmd.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0005-maas-use-maas-region-instead-of-deprecated-cmd.patch	2020-07-21 16:20:57.000000000 +0000
@@ -0,0 +1,23 @@
+From 43b4a9ab8f3b9ff9666f377ffce08e64688855e5 Mon Sep 17 00:00:00 2001
+From: Alberto Donato <alberto.donato@canonical.com>
+Date: Fri, 10 Jul 2020 20:32:43 +0200
+Subject: [PATCH] [maas] use maas-region instead of deprecated
+ maas-region-admin
+
+Signed-off-by: Alberto Donato <alberto.donato@canonical.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+
+Index: sosreport-3.9.1/sos/plugins/maas.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/maas.py
++++ sosreport-3.9.1/sos/plugins/maas.py
+@@ -104,7 +104,7 @@ class Maas(Plugin, UbuntuPlugin):
+ 
+         if self.is_installed("maas-region-controller"):
+             self.add_cmd_output([
+-                "maas-region-admin dumpdata",
++                "maas-region dumpdata",
+             ])
+ 
+         if self._has_login_options():
diff -pruN 3.9.1-1/debian/patches/0006-systemd-update-trigger.patch 3.9.1-1ubuntu4/debian/patches/0006-systemd-update-trigger.patch
--- 3.9.1-1/debian/patches/0006-systemd-update-trigger.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0006-systemd-update-trigger.patch	2020-07-21 16:21:26.000000000 +0000
@@ -0,0 +1,36 @@
+From e8b38048c68ed55f315561c7416a08bb87e24708 Mon Sep 17 00:00:00 2001
+From: Heather Lemon <heather.lemon@canonical.com>
+Date: Thu, 16 Apr 2020 09:08:31 -0600
+Subject: [PATCH] [systemd] update trigger with better generic file check
+
+Currently it checks for the existance of systemd using two
+different directories depending on the distro used. Updating
+systemd trigger to handle the detection of checking for
+systemd more reliably and generically.
+
+Reference:
+https://github.com/systemd/systemd/blob/master/src/libsystemd/sd-daemon/sd-daemon.c#L598-L604
+
+Closes: #2013
+Resolves: #2029
+
+Signed-off-by: Heather Lemon <heather.lemon@canonical.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+
+Index: sosreport-3.9.1/sos/plugins/systemd.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/systemd.py
++++ sosreport-3.9.1/sos/plugins/systemd.py
+@@ -19,10 +19,7 @@ class Systemd(Plugin, RedHatPlugin, Debi
+     profiles = ('system', 'services', 'boot')
+ 
+     packages = ('systemd',)
+-    files = (
+-        '/usr/lib/systemd/systemd',
+-        '/lib/systemd/systemd'
+-    )
++    files = ('/run/systemd/system',)
+ 
+     def setup(self):
+         self.add_cmd_output([
diff -pruN 3.9.1-1/debian/patches/0007-drbd-add-new-plugin.patch 3.9.1-1ubuntu4/debian/patches/0007-drbd-add-new-plugin.patch
--- 3.9.1-1/debian/patches/0007-drbd-add-new-plugin.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0007-drbd-add-new-plugin.patch	2020-07-21 16:28:16.000000000 +0000
@@ -0,0 +1,57 @@
+From 4be4e4eae3ae070e25e69611fed3e5ee8493ad73 Mon Sep 17 00:00:00 2001
+From: Jose Castillo <jcastillo@redhat.com>
+Date: Thu, 18 Jun 2020 10:32:10 +0100
+Subject: [PATCH] [drbd] Add new plugin for DRBD
+
+This patch implements a new plugin
+to capture information about Distributed
+Replicated Block Device (DRBD) setups.
+
+Closes: #2102
+Resolves: #2120
+
+Signed-off-by: Jose Castillo <jcastillo@redhat.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/drbd.py | 33 +++++++++++++++++++++++++++++++++
+ 1 file changed, 33 insertions(+)
+ create mode 100644 sos/plugins/drbd.py
+
+Index: sosreport-3.9.1/sos/plugins/drbd.py
+===================================================================
+--- /dev/null
++++ sosreport-3.9.1/sos/plugins/drbd.py
+@@ -0,0 +1,33 @@
++# This file is part of the sos project: https://github.com/sosreport/sos
++#
++# This copyrighted material is made available to anyone wishing to use,
++# modify, copy, or redistribute it subject to the terms and conditions of
++# version 2 of the GNU General Public License.
++#
++# See the LICENSE file in the source distribution for further information.
++
++from sos.plugins import Plugin, RedHatPlugin, UbuntuPlugin
++
++
++class drbd(Plugin, RedHatPlugin, UbuntuPlugin):
++
++    short_desc = 'Distributed Replicated Block Device (DRBD)'
++
++    plugin_name = 'drbd'
++    profiles = ('storage')
++    packages = ('drbd.*-utils',)
++
++    def setup(self):
++        self.add_cmd_output([
++            "drbd-overview",
++            "drbdadm dump-xml",
++            "drbdsetup status",
++            "drbdsetup show"
++        ])
++        self.add_copy_spec([
++            "/etc/drbd.conf",
++            "/etc/drbd.d/*",
++            "/proc/drbd"
++        ])
++
++# vim: set et ts=4 sw=4 :
diff -pruN 3.9.1-1/debian/patches/0008-networking-produce-numbered-ufw-rule.patch 3.9.1-1ubuntu4/debian/patches/0008-networking-produce-numbered-ufw-rule.patch
--- 3.9.1-1/debian/patches/0008-networking-produce-numbered-ufw-rule.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0008-networking-produce-numbered-ufw-rule.patch	2020-07-21 16:32:25.000000000 +0000
@@ -0,0 +1,34 @@
+From 591cd4cf0c148500cf5287dc51580822c1551c37 Mon Sep 17 00:00:00 2001
+From: "David A. Desrosiers" <setuid@gmail.com>
+Date: Wed, 13 May 2020 11:24:33 -0400
+Subject: [PATCH] [networking] Small change to produce more-useful, numbered
+ ufw rule status
+
+This allows inspection of the rule order, as well as insert/edit/delete of
+the rules by that numbered id (ufw delete 23).
+
+More details can be found here: https://help.ubuntu.com/community/UFW
+
+Resolves: #2065
+
+Signed-off-by: David A. Desrosiers <setuid@gmail.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/networking.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: sosreport-3.9.1/sos/plugins/networking.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/networking.py
++++ sosreport-3.9.1/sos/plugins/networking.py
+@@ -313,8 +313,8 @@ class UbuntuNetworking(Networking, Ubunt
+             "/run/systemd/network"
+         ])
+         self.add_cmd_output([
+-            "/usr/sbin/ufw status",
+-            "/usr/sbin/ufw app list"
++            "ufw status numbered",
++            "ufw app list"
+         ])
+         if self.get_option("traceroute"):
+             self.add_cmd_output("/usr/sbin/traceroute -n %s" % self.trace_host)
diff -pruN 3.9.1-1/debian/patches/0009-ubuntu-support-status-command-update.patch 3.9.1-1ubuntu4/debian/patches/0009-ubuntu-support-status-command-update.patch
--- 3.9.1-1/debian/patches/0009-ubuntu-support-status-command-update.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0009-ubuntu-support-status-command-update.patch	2020-07-21 16:33:31.000000000 +0000
@@ -0,0 +1,36 @@
+From e9d71c7899607cd8107c1c0f443c945bd8328700 Mon Sep 17 00:00:00 2001
+From: Eric Desrochers <eric.desrochers@canonical.com>
+Date: Sun, 5 Jul 2020 14:31:23 -0400
+Subject: [PATCH] [ubuntu] support status command update
+
+Dropping 'ubuntu-support-status' as
+is it confusing and not very useful
+in favor of 'ubuntu-security-status'
+which, for now, is only available
+starting with Focal/20.04LTS.
+
+Ubuntu bug report:
+https://launchpad.net/bugs/1873362
+
+Closes: #2139
+Resolves: #2140
+
+Signed-off-by: Eric Desrochers <eric.desrochers@canonical.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/ubuntu.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: sosreport-3.9.1/sos/plugins/ubuntu.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/ubuntu.py
++++ sosreport-3.9.1/sos/plugins/ubuntu.py
+@@ -18,7 +18,7 @@ class Ubuntu(Plugin, UbuntuPlugin):
+ 
+     def setup(self):
+         self.add_cmd_output([
+-            "ubuntu-support-status --show-all",
++            "ubuntu-security-status --thirdparty --unavailable",
+             "hwe-support-status --verbose",
+             "ubuntu-advantage status"
+         ])
diff -pruN 3.9.1-1/debian/patches/0010-pacemaker-fix-password-with-equal-sign.patch 3.9.1-1ubuntu4/debian/patches/0010-pacemaker-fix-password-with-equal-sign.patch
--- 3.9.1-1/debian/patches/0010-pacemaker-fix-password-with-equal-sign.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0010-pacemaker-fix-password-with-equal-sign.patch	2020-07-21 16:34:35.000000000 +0000
@@ -0,0 +1,43 @@
+From b34edec39189d5501b9943f73ec2afa7c7b98d58 Mon Sep 17 00:00:00 2001
+From: Reid wahl <nrwahl@protonmail.com>
+Date: Mon, 8 Jun 2020 22:50:00 -0700
+Subject: [PATCH] [pacemaker] Fix scrubbing when password contains an equal
+ sign
+
+If the password contains one or more equal signs ('='), only the substring
+after the final equal sign is scrubbed. The rest of the password appears in
+plain text.
+
+This patch modifies the scrub regex to scrub all characters after the first
+equal sign.
+
+Related to RHBZ#1845386.
+Resolves: #2109
+
+Signed-off-by: Reid Wahl <nrwahl@protonmail.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/pacemaker.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: sosreport-3.9.1/sos/plugins/pacemaker.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/pacemaker.py
++++ sosreport-3.9.1/sos/plugins/pacemaker.py
+@@ -55,14 +55,14 @@ class Pacemaker(Plugin):
+     def postproc_crm_shell(self):
+         self.do_cmd_output_sub(
+             "crm configure show",
+-            r"passw(\S*)=\S+",
++            r"passw([^\s=]*)=\S+",
+             r"passw\1=********"
+         )
+ 
+     def postproc_pcs(self):
+         self.do_cmd_output_sub(
+             "pcs config",
+-            r"passw(\S*)=\S+",
++            r"passw([^\s=]*)=\S+",
+             r"passw\1=********"
+         )
+ 
diff -pruN 3.9.1-1/debian/patches/0011-k8s-add-support-for-alternate-ubuntu-deployments.patch 3.9.1-1ubuntu4/debian/patches/0011-k8s-add-support-for-alternate-ubuntu-deployments.patch
--- 3.9.1-1/debian/patches/0011-k8s-add-support-for-alternate-ubuntu-deployments.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0011-k8s-add-support-for-alternate-ubuntu-deployments.patch	2020-07-21 16:39:15.000000000 +0000
@@ -0,0 +1,49 @@
+Author: Nick Niehoff <nick.niehoff@canonical.com>
+Date:   Thu Jun 4 14:56:20 2020 -0600
+
+    [kubernetes] Adding support for alternate Ubuntu deployments
+    
+    This plugin is only executed if Kubernetes is deployed using
+    Canonical's Charmed Distribution of Kubernetes.  The plugin
+    should also be run if other deployment methods are used.
+    
+    Also adding service names if the Ubuntu Snaps are used for
+    the kubernetes control plane.
+    
+    Closes: #2103
+    
+    Signed-off-by: Nick Niehoff <nick.niehoff@canonical.com>
+    Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+Index: sosreport-3.9.1/sos/plugins/kubernetes.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/kubernetes.py
++++ sosreport-3.9.1/sos/plugins/kubernetes.py
+@@ -53,7 +53,12 @@ class Kubernetes(Plugin):
+             'kube-apiserver',
+             'kube-proxy',
+             'kube-scheduler',
+-            'kube-controller-manager'
++            'kube-controller-manager',
++            'snap.kubelet.daemon',
++            'snap.kube-apiserver.daemon',
++            'snap.kube-proxy.daemon',
++            'snap.kube-scheduler.daemon',
++            'snap.kube-controller-manager.daemon'
+         ]
+ 
+         for svc in svcs:
+@@ -200,9 +205,10 @@ class UbuntuKubernetes(Kubernetes, Ubunt
+     """
+ 
+     packages = ('kubernetes',)
+-
+-    files = ('/root/cdk/kubeproxyconfig',)
+-
+-    kube_cmd = "kubectl --kubeconfig=/root/cdk/kubeproxyconfig"
++    files = ('/root/cdk/kubeproxyconfig', '/etc/kubernetes')
++    if path.exists('/root/cdk/kubeproxyconfig'):
++        kube_cmd = "kubectl --kubeconfig=/root/cdk/kubeproxyconfig"
++    elif path.exists('/etc/kubernetes/admin.conf'):
++        kube_cmd = "kubectl --kubeconfig=/etc/kubernetes/admin.conf"
+ 
+ # vim: et ts=5 sw=4
diff -pruN 3.9.1-1/debian/patches/0012-networking-collect-iptables-when-proper-kernel-modules-loaded.patch 3.9.1-1ubuntu4/debian/patches/0012-networking-collect-iptables-when-proper-kernel-modules-loaded.patch
--- 3.9.1-1/debian/patches/0012-networking-collect-iptables-when-proper-kernel-modules-loaded.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0012-networking-collect-iptables-when-proper-kernel-modules-loaded.patch	2020-07-21 16:40:39.000000000 +0000
@@ -0,0 +1,75 @@
+From 31e0467885ef3986b476ea070941a786b426f298 Mon Sep 17 00:00:00 2001
+From: Pavel Moravec <pmoravec@redhat.com>
+Date: Fri, 8 May 2020 14:06:41 +0200
+Subject: [PATCH] [networking] collect iptables when proper kernel modules
+ loaded
+
+Since kernel-4, iptables / ip6tables is newly provided by nf_tables
+kernel module. Therefore, collecting ip[,6]tables commands should
+be gated by presence of also this kernel module.
+
+Resolves: #2054
+
+Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
+Signed-off-by: Bryan Quigley <bryan.quigley@canonical.com>
+---
+ sos/plugins/networking.py | 23 +++++++++++++----------
+ 1 file changed, 13 insertions(+), 10 deletions(-)
+
+Index: sosreport-3.9.1/sos/plugins/networking.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/networking.py
++++ sosreport-3.9.1/sos/plugins/networking.py
+@@ -34,22 +34,24 @@ class Networking(Plugin):
+     ns_wide = "-W"
+ 
+     def collect_iptable(self, tablename):
+-        """ When running the iptables command, it unfortunately auto-loads
+-        the modules before trying to get output.  Some people explicitly
+-        don't want this, so check if the modules are loaded before running
+-        the command.  If they aren't loaded, there can't possibly be any
+-        relevant rules in that table """
++        """ Collecting iptables rules for a table loads either kernel module
++        of the table name (for kernel <= 3), or nf_tables (for kernel >= 4).
++        If neither module is present, the rules must be empty."""
+ 
+         modname = "iptable_" + tablename
+         cmd = "iptables -t " + tablename + " -nvL"
+-        self.add_cmd_output(cmd, pred=SoSPredicate(self, kmods=[modname]))
++        self.add_cmd_output(
++            cmd,
++            pred=SoSPredicate(self, kmods=[modname, 'nf_tables']))
+ 
+     def collect_ip6table(self, tablename):
+         """ Same as function above, but for ipv6 """
+ 
+         modname = "ip6table_" + tablename
+         cmd = "ip6tables -t " + tablename + " -nvL"
+-        self.add_cmd_output(cmd, pred=SoSPredicate(self, kmods=[modname]))
++        self.add_cmd_output(
++            cmd,
++            pred=SoSPredicate(self, kmods=[modname, 'nf_tables']))
+ 
+     def collect_nftables(self):
+         """ Collects nftables rulesets with 'nft' commands if the modules
+@@ -150,16 +152,17 @@ class Networking(Plugin):
+         self.add_cmd_output(ss_cmd, pred=ss_pred, changes=True)
+ 
+         # When iptables is called it will load the modules
+-        # iptables and iptables_filter if they are not loaded.
++        # iptables_filter (for kernel <= 3) or
++        # nf_tables (for kernel >= 4) if they are not loaded.
+         # The same goes for ipv6.
+         self.add_cmd_output(
+             "iptables -vnxL",
+-            pred=SoSPredicate(self, kmods=['iptable_filter'])
++            pred=SoSPredicate(self, kmods=['iptable_filter', 'nf_tables'])
+         )
+ 
+         self.add_cmd_output(
+             "ip6tables -vnxL",
+-            pred=SoSPredicate(self, kmods=['ip6table_filter'])
++            pred=SoSPredicate(self, kmods=['ip6table_filter', 'nf_tables'])
+         )
+ 
+         # Get ethtool output for every device that does not exist in a
diff -pruN 3.9.1-1/debian/patches/0013-ovs-only-check-mempool-info-for-dpdk-init-true.patch 3.9.1-1ubuntu4/debian/patches/0013-ovs-only-check-mempool-info-for-dpdk-init-true.patch
--- 3.9.1-1/debian/patches/0013-ovs-only-check-mempool-info-for-dpdk-init-true.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0013-ovs-only-check-mempool-info-for-dpdk-init-true.patch	2020-07-27 13:07:16.000000000 +0000
@@ -0,0 +1,63 @@
+From ac1ebcc8ba307f4eaeb249959c98fa5fb9ac2f15 Mon Sep 17 00:00:00 2001
+From: Aaron Conole <aconole@redhat.com>
+Date: Thu, 7 May 2020 10:32:59 -0400
+Subject: [PATCH] [openvswitch] only check mempool information for
+ dpdk-init=true
+
+Ensures that the get-mempool-info command will be present.
+
+Signed-off-by: Aaron Conole <aconole@redhat.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/openvswitch.py | 19 +++++++++++--------
+ 1 file changed, 11 insertions(+), 8 deletions(-)
+
+Index: sosreport-3.9.1/sos/plugins/openvswitch.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/openvswitch.py
++++ sosreport-3.9.1/sos/plugins/openvswitch.py
+@@ -29,6 +29,11 @@ class OpenVSwitch(Plugin):
+             '/usr/local/var/log/openvswitch/',
+         ]
+ 
++        dpdk_enabled = self.collect_cmd_output(
++            "ovs-vsctl -t 5 get Open_vSwitch . other_config:dpdk-init")
++        check_dpdk = (dpdk_enabled["status"] == 0 and
++                      dpdk_enabled["output"].startswith('"true"'))
++
+         if environ.get('OVS_LOGDIR'):
+             log_dirs.append(environ.get('OVS_LOGDIR'))
+ 
+@@ -105,7 +110,7 @@ class OpenVSwitch(Plugin):
+         self.add_journal(units="ovsdb-server")
+ 
+         # Gather additional output for each OVS bridge on the host.
+-        br_list_result = self.collect_cmd_output("ovs-vsctl list-br")
++        br_list_result = self.collect_cmd_output("ovs-vsctl -t 5 list-br")
+         if br_list_result['status'] == 0:
+             for br in br_list_result['output'].splitlines():
+                 self.add_cmd_output([
+@@ -147,18 +152,16 @@ class OpenVSwitch(Plugin):
+                             "ovs-ofctl -O %s dump-ports-desc %s" % (flow, br)
+                         ])
+ 
+-        # Gather info on the DPDK mempools associated with each DPDK port
+-        br_list_result = self.collect_cmd_output("ovs-vsctl -t 5 list-br")
+-        if br_list_result['status'] == 0:
+-            for br in br_list_result['output'].splitlines():
+                 port_list_result = self.exec_cmd(
+                     "ovs-vsctl -t 5 list-ports %s" % br
+                 )
+                 if port_list_result['status'] == 0:
+                     for port in port_list_result['output'].splitlines():
+-                        self.add_cmd_output(
+-                            "ovs-appctl netdev-dpdk/get-mempool-info %s" % port
+-                        )
++                        if check_dpdk:
++                            self.add_cmd_output(
++                                "ovs-appctl netdev-dpdk/get-mempool-info %s" %
++                                port
++                            )
+ 
+ 
+ class RedHatOpenVSwitch(OpenVSwitch, RedHatPlugin):
diff -pruN 3.9.1-1/debian/patches/0014-ovs-add-support-for-openflow-1.4-and-1.5.patch 3.9.1-1ubuntu4/debian/patches/0014-ovs-add-support-for-openflow-1.4-and-1.5.patch
--- 3.9.1-1/debian/patches/0014-ovs-add-support-for-openflow-1.4-and-1.5.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0014-ovs-add-support-for-openflow-1.4-and-1.5.patch	2020-07-27 13:07:48.000000000 +0000
@@ -0,0 +1,30 @@
+From e1b474af6bccee152fcdaa247e743d924348a71c Mon Sep 17 00:00:00 2001
+From: Aaron Conole <aconole@redhat.com>
+Date: Thu, 7 May 2020 10:34:25 -0400
+Subject: [PATCH] [openvswitch] add support for OpenFlow 1.4 and 1.5
+
+The bridge protocol support has been extended for some time,
+so ensure that we actually pull this protocol information
+if it is configured that way.
+
+Signed-off-by: Aaron Conole <aconole@redhat.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/openvswitch.py | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+Index: sosreport-3.9.1/sos/plugins/openvswitch.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/openvswitch.py
++++ sosreport-3.9.1/sos/plugins/openvswitch.py
+@@ -129,7 +129,9 @@ class OpenVSwitch(Plugin):
+                     "OpenFlow10",
+                     "OpenFlow11",
+                     "OpenFlow12",
+-                    "OpenFlow13"
++                    "OpenFlow13",
++                    "OpenFlow14",
++                    "OpenFlow15"
+                 ]
+ 
+                 # List protocols currently in use, if any
diff -pruN 3.9.1-1/debian/patches/0015-ovs-pull-additional-bridge-info.patch 3.9.1-1ubuntu4/debian/patches/0015-ovs-pull-additional-bridge-info.patch
--- 3.9.1-1/debian/patches/0015-ovs-pull-additional-bridge-info.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0015-ovs-pull-additional-bridge-info.patch	2020-07-27 13:08:25.000000000 +0000
@@ -0,0 +1,37 @@
+From 798fc4a5c204b59cbe39ae7aca194642e3d78faa Mon Sep 17 00:00:00 2001
+From: Aaron Conole <aconole@redhat.com>
+Date: Thu, 7 May 2020 10:36:37 -0400
+Subject: [PATCH] [openvswitch] pull additional bridge information
+
+Pulls additional flow stats, features, forwarding information and mac
+layer information.
+
+Signed-off-by: Aaron Conole <aconole@redhat.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/openvswitch.py | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+Index: sosreport-3.9.1/sos/plugins/openvswitch.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/openvswitch.py
++++ sosreport-3.9.1/sos/plugins/openvswitch.py
+@@ -114,14 +114,17 @@ class OpenVSwitch(Plugin):
+         if br_list_result['status'] == 0:
+             for br in br_list_result['output'].splitlines():
+                 self.add_cmd_output([
++                    "ovs-appctl bridge/dump-flows --offload-stats %s" % br,
++                    "ovs-appctl dpif/show-dp-features %s" % br,
+                     "ovs-appctl fdb/show %s" % br,
++                    "ovs-appctl fdb/stats-show %s" % br,
++                    "ovs-appctl mdb/show %s" % br,
+                     "ovs-ofctl dump-flows %s" % br,
+                     "ovs-ofctl dump-ports-desc %s" % br,
+                     "ovs-ofctl dump-ports %s" % br,
+                     "ovs-ofctl queue-get-config %s" % br,
+                     "ovs-ofctl queue-stats %s" % br,
+                     "ovs-ofctl show %s" % br,
+-                    "ovs-appctl fdb/stats-show %s" % br
+                 ])
+ 
+                 # Flow protocols currently supported
diff -pruN 3.9.1-1/debian/patches/0016-ovs-capture-all-datapath-data.patch 3.9.1-1ubuntu4/debian/patches/0016-ovs-capture-all-datapath-data.patch
--- 3.9.1-1/debian/patches/0016-ovs-capture-all-datapath-data.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0016-ovs-capture-all-datapath-data.patch	2020-07-27 13:08:57.000000000 +0000
@@ -0,0 +1,78 @@
+From eb145d9484cae850f6fc4984e2e229486241c833 Mon Sep 17 00:00:00 2001
+From: Aaron Conole <aconole@redhat.com>
+Date: Thu, 7 May 2020 10:40:36 -0400
+Subject: [PATCH] [openvswitch] capture all datapath data
+
+This includes flows, ct stats, frag stats, and conntrack information
+for all of the datapath types that are active.  Additionally, pull the
+tunnel information for datapaths.
+
+Stop using 'ovs-dpctl' in favor of 'ovs-appctl dpctl/*' - for multiple
+reasons.  The 'ovs-dpctl' command doesn't support the userspace
+datapath.  'ovs-dpctl' cannot pull all attribute types (including
+type=offloaded) in newer OVS versions.  Also, the default attribute
+type is 'all' so adding type=offloaded is redundant.
+
+Signed-off-by: Aaron Conole <aconole@redhat.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/openvswitch.py | 27 +++++++++++++++------------
+ 1 file changed, 15 insertions(+), 12 deletions(-)
+
+Index: sosreport-3.9.1/sos/plugins/openvswitch.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/openvswitch.py
++++ sosreport-3.9.1/sos/plugins/openvswitch.py
+@@ -48,13 +48,6 @@ class OpenVSwitch(Plugin):
+         ])
+ 
+         self.add_cmd_output([
+-            # The '-s' option enables dumping of packet counters on the
+-            # ports.
+-            "ovs-dpctl -s show",
+-            # Capture the in-kernel flow information if it exists
+-            "ovs-dpctl dump-flows -m",
+-            # Capture the flow information also for offloaded rules
+-            "ovs-dpctl dump-flows type=offloaded -m",
+             # 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",
+@@ -91,16 +84,14 @@ class OpenVSwitch(Plugin):
+             "ovs-vsctl list interface",
+             # Capture OVS detailed information from all the bridges
+             "ovs-vsctl list bridge",
+-            # Capture DPDK datapath packet counters and config
+-            "ovs-appctl dpctl/show -s",
+-            # Capture DPDK datapath flows
+-            "ovs-appctl dpctl/dump-flows",
+             # Capture DPDK queue to pmd mapping
+             "ovs-appctl dpif-netdev/pmd-rxq-show",
+             # Capture DPDK pmd stats
+             "ovs-appctl dpif-netdev/pmd-stats-show",
+             # Capture DPDK pmd performance counters
+-            "ovs-appctl dpif-netdev/pmd-perf-show"
++            "ovs-appctl dpif-netdev/pmd-perf-show",
++            # Capture ofproto tunnel configs
++            "ovs-appctl ofproto/list-tunnels"
+         ])
+ 
+         # Gather systemd services logs
+@@ -109,6 +100,18 @@ class OpenVSwitch(Plugin):
+         self.add_journal(units="ovs-vswitchd")
+         self.add_journal(units="ovsdb-server")
+ 
++        # Gather the datapath information for each datapath
++        dp_list_result = self.collect_cmd_output('ovs-appctl dpctl/dump-dps')
++        if dp_list_result['status'] == 0:
++            for dp in dp_list_result['output'].splitlines():
++                self.add_cmd_output([
++                    "ovs-appctl dpctl/show -s %s" % dp,
++                    "ovs-appctl dpctl/dump-flows -m %s" % dp,
++                    "ovs-appctl dpctl/dump-conntrack -m %s" % dp,
++                    "ovs-appctl dpctl/ct-stats-show -m %s" % dp,
++                    "ovs-appctl dpctl/ipf-get-status %s" % dp,
++                ])
++
+         # Gather additional output for each OVS bridge on the host.
+         br_list_result = self.collect_cmd_output("ovs-vsctl -t 5 list-br")
+         if br_list_result['status'] == 0:
diff -pruN 3.9.1-1/debian/patches/0017-ovs-ensure-t-5-for-ovs-vsctl-where-needed.patch 3.9.1-1ubuntu4/debian/patches/0017-ovs-ensure-t-5-for-ovs-vsctl-where-needed.patch
--- 3.9.1-1/debian/patches/0017-ovs-ensure-t-5-for-ovs-vsctl-where-needed.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0017-ovs-ensure-t-5-for-ovs-vsctl-where-needed.patch	2020-07-27 13:10:08.000000000 +0000
@@ -0,0 +1,43 @@
+From bc0c02453e1746083173301857edfc7fdccb8a9c Mon Sep 17 00:00:00 2001
+From: Aaron Conole <aconole@redhat.com>
+Date: Thu, 7 May 2020 10:43:14 -0400
+Subject: [PATCH] [openvswitch] ensure -t 5 for ovs-vsctl where needed
+
+Most instances of ovs-vsctl were run without a previous check.  If
+the vswitchd is in a hung state, the command may never timeout.  Ensure
+that most places are using the timeout option.
+
+Signed-off-by: Aaron Conole <aconole@redhat.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/openvswitch.py | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+Index: sosreport-3.9.1/sos/plugins/openvswitch.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/openvswitch.py
++++ sosreport-3.9.1/sos/plugins/openvswitch.py
+@@ -79,11 +79,11 @@ class OpenVSwitch(Plugin):
+             # Capture DPDK and other parameters
+             "ovs-vsctl -t 5 get Open_vSwitch . other_config",
+             # Capture OVS list
+-            "ovs-vsctl list Open_vSwitch",
++            "ovs-vsctl -t 5 list Open_vSwitch",
+             # Capture OVS interface list
+-            "ovs-vsctl list interface",
++            "ovs-vsctl -t 5 list interface",
+             # Capture OVS detailed information from all the bridges
+-            "ovs-vsctl list bridge",
++            "ovs-vsctl -t 5 list bridge",
+             # Capture DPDK queue to pmd mapping
+             "ovs-appctl dpif-netdev/pmd-rxq-show",
+             # Capture DPDK pmd stats
+@@ -141,7 +141,7 @@ class OpenVSwitch(Plugin):
+                 ]
+ 
+                 # List protocols currently in use, if any
+-                ovs_list_bridge_cmd = "ovs-vsctl list bridge %s" % br
++                ovs_list_bridge_cmd = "ovs-vsctl -t 5 list bridge %s" % br
+                 br_info = self.collect_cmd_output(ovs_list_bridge_cmd)
+ 
+                 for line in br_info['output'].splitlines():
diff -pruN 3.9.1-1/debian/patches/0018-ovs-list-important-dpdk-related-dir.patch 3.9.1-1ubuntu4/debian/patches/0018-ovs-list-important-dpdk-related-dir.patch
--- 3.9.1-1/debian/patches/0018-ovs-list-important-dpdk-related-dir.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0018-ovs-list-important-dpdk-related-dir.patch	2020-07-27 13:10:51.000000000 +0000
@@ -0,0 +1,34 @@
+From 27ef2569734f3d99eb7bfcdee721b364beaa8114 Mon Sep 17 00:00:00 2001
+From: Aaron Conole <aconole@redhat.com>
+Date: Thu, 7 May 2020 10:44:31 -0400
+Subject: [PATCH] [openvswitch] List important dpdk related directories
+
+Sometimes the permissions or selinux attributes are modified in an
+unexpected way.
+
+Signed-off-by: Aaron Conole <aconole@redhat.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/openvswitch.py | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/sos/plugins/openvswitch.py b/sos/plugins/openvswitch.py
+index 76bbf8ed..4792371d 100644
+--- a/sos/plugins/openvswitch.py
++++ b/sos/plugins/openvswitch.py
+@@ -53,8 +53,11 @@ class OpenVSwitch(Plugin):
+             "ovs-vsctl -t 5 show",
+             # Gather the database.
+             "ovsdb-client -f list dump",
+-            # List the contents of runtime directory
++            # List the contents of important runtime directories
+             "ls -laZ /run/openvswitch",
++            "ls -laZ /dev/hugepages/",
++            "ls -laZ /dev/vfio",
++            "ls -laZ /var/lib/vhost_sockets",
+             # List devices and their drivers
+             "dpdk_nic_bind --status",
+             "dpdk_devbind.py --status",
+-- 
+2.27.0
+
diff -pruN 3.9.1-1/debian/patches/0019-ovs-add-lacp-stats.patch 3.9.1-1ubuntu4/debian/patches/0019-ovs-add-lacp-stats.patch
--- 3.9.1-1/debian/patches/0019-ovs-add-lacp-stats.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0019-ovs-add-lacp-stats.patch	2020-07-27 13:11:27.000000000 +0000
@@ -0,0 +1,23 @@
+From 4703cbaa5f4c143648114879d2b95a3f2c50521a Mon Sep 17 00:00:00 2001
+From: Aaron Conole <aconole@redhat.com>
+Date: Thu, 7 May 2020 10:46:57 -0400
+Subject: [PATCH] [openvswitch] Add LACP stats
+
+Signed-off-by: Aaron Conole <aconole@redhat.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/openvswitch.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: sosreport-3.9.1/sos/plugins/openvswitch.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/openvswitch.py
++++ sosreport-3.9.1/sos/plugins/openvswitch.py
+@@ -69,6 +69,7 @@ class OpenVSwitch(Plugin):
+             "ovs-appctl bond/show",
+             # Capture LACP details
+             "ovs-appctl lacp/show",
++            "ovs-appctl lacp/show-stats",
+             # Capture coverage stats"
+             "ovs-appctl coverage/show",
+             # Capture cached routes
diff -pruN 3.9.1-1/debian/patches/0020-ovs-pull-cfm-qos-and-bond-info.patch 3.9.1-1ubuntu4/debian/patches/0020-ovs-pull-cfm-qos-and-bond-info.patch
--- 3.9.1-1/debian/patches/0020-ovs-pull-cfm-qos-and-bond-info.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0020-ovs-pull-cfm-qos-and-bond-info.patch	2020-07-27 13:11:46.000000000 +0000
@@ -0,0 +1,36 @@
+From 96c693857619f1a3a10c68b075c74be9a8fa3776 Mon Sep 17 00:00:00 2001
+From: Aaron Conole <aconole@redhat.com>
+Date: Thu, 7 May 2020 10:51:32 -0400
+Subject: [PATCH] [openvswitch] pull cfm, qos, and bond info
+
+The connectivity fault mgmt, qos and bond data can all be retrieved
+on a per-port basis.
+
+Signed-off-by: Aaron Conole <aconole@redhat.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/openvswitch.py | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/sos/plugins/openvswitch.py b/sos/plugins/openvswitch.py
+index feb3a459..833a1662 100644
+--- a/sos/plugins/openvswitch.py
++++ b/sos/plugins/openvswitch.py
+@@ -169,6 +169,14 @@ class OpenVSwitch(Plugin):
+                 )
+                 if port_list_result['status'] == 0:
+                     for port in port_list_result['output'].splitlines():
++                        self.add_cmd_output([
++                            "ovs-appctl cfm/show %s" % port,
++                            "ovs-appctl qos/show %s" % port,
++                            # Not all ports are "bond"s, but all "bond"s are
++                            # a single port
++                            "ovs-appctl bond/show %s" % port,
++                        ])
++
+                         if check_dpdk:
+                             self.add_cmd_output(
+                                 "ovs-appctl netdev-dpdk/get-mempool-info %s" %
+-- 
+2.27.0
+
diff -pruN 3.9.1-1/debian/patches/0021-ovs-poll-dpdk-status-from-ifaces-and-ports.patch 3.9.1-1ubuntu4/debian/patches/0021-ovs-poll-dpdk-status-from-ifaces-and-ports.patch
--- 3.9.1-1/debian/patches/0021-ovs-poll-dpdk-status-from-ifaces-and-ports.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/0021-ovs-poll-dpdk-status-from-ifaces-and-ports.patch	2020-07-27 13:12:22.000000000 +0000
@@ -0,0 +1,38 @@
+From c2bf52d77eee2e2312c4e631951ba0404737e441 Mon Sep 17 00:00:00 2001
+From: Aaron Conole <aconole@redhat.com>
+Date: Thu, 7 May 2020 16:36:38 -0400
+Subject: [PATCH] [openvswitch] poll dpdk status from ifaces and ports
+
+It's possible that a deployment is using ovs-bonds rather than
+dpdk bond ports.  In that case, it's required to pull the iface
+information as well.
+
+Resolves: #2051
+
+Signed-off-by: Aaron Conole <aconole@redhat.com>
+Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
+---
+ sos/plugins/openvswitch.py | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+Index: sosreport-3.9.1/sos/plugins/openvswitch.py
+===================================================================
+--- sosreport-3.9.1.orig/sos/plugins/openvswitch.py
++++ sosreport-3.9.1/sos/plugins/openvswitch.py
+@@ -183,6 +183,16 @@ class OpenVSwitch(Plugin):
+                                 port
+                             )
+ 
++                if check_dpdk:
++                    iface_list_result = self.exec_cmd(
++                        "ovs-vsctl -t 5 list-ifaces %s" % br
++                    )
++                    if iface_list_result['status'] == 0:
++                        for iface in iface_list_result['output'].splitlines():
++                            self.add_cmd_output(
++                                "ovs-appctl netdev-dpdk/get-mempool-info %s" %
++                                iface)
++
+ 
+ class RedHatOpenVSwitch(OpenVSwitch, RedHatPlugin):
+ 
diff -pruN 3.9.1-1/debian/patches/series 3.9.1-1ubuntu4/debian/patches/series
--- 3.9.1-1/debian/patches/series	2020-06-16 12:18:58.000000000 +0000
+++ 3.9.1-1ubuntu4/debian/patches/series	2020-07-27 13:19:05.000000000 +0000
@@ -0,0 +1,21 @@
+0001-hardware-lshw-command.patch
+0002-lds-substitute-oidc-conf.patch
+0003-kvm-change-trigger-to-dev-kvm.patch
+0004-maas-add-snap-support.patch
+0005-maas-use-maas-region-instead-of-deprecated-cmd.patch
+0006-systemd-update-trigger.patch
+0007-drbd-add-new-plugin.patch
+0008-networking-produce-numbered-ufw-rule.patch
+0009-ubuntu-support-status-command-update.patch
+0010-pacemaker-fix-password-with-equal-sign.patch
+0011-k8s-add-support-for-alternate-ubuntu-deployments.patch
+0012-networking-collect-iptables-when-proper-kernel-modules-loaded.patch
+0013-ovs-only-check-mempool-info-for-dpdk-init-true.patch
+0014-ovs-add-support-for-openflow-1.4-and-1.5.patch
+0015-ovs-pull-additional-bridge-info.patch
+0016-ovs-capture-all-datapath-data.patch
+0017-ovs-ensure-t-5-for-ovs-vsctl-where-needed.patch
+0018-ovs-list-important-dpdk-related-dir.patch
+0019-ovs-add-lacp-stats.patch
+0020-ovs-pull-cfm-qos-and-bond-info.patch
+0021-ovs-poll-dpdk-status-from-ifaces-and-ports.patch
