diff --git a/SOURCES/openvswitch-2.17.0.patch b/SOURCES/openvswitch-2.17.0.patch
index caa6ae8..0ef8df9 100644
--- a/SOURCES/openvswitch-2.17.0.patch
+++ b/SOURCES/openvswitch-2.17.0.patch
@@ -55104,7 +55104,7 @@ index b89dfdd52a..6c90946388 100644
                                              gnh->options, &crit_opt);
  
 diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
-index 94dc6a9b74..1ad87e5ffc 100644
+index 94dc6a9b74..cecec071ca 100644
 --- a/lib/netdev-offload-dpdk.c
 +++ b/lib/netdev-offload-dpdk.c
 @@ -18,6 +18,7 @@
@@ -55218,6 +55218,59 @@ index 94dc6a9b74..1ad87e5ffc 100644
      } else {
          VLOG_ERR("Failed flow: %s/%s: flow destroy %d ufid " UUID_FMT,
                   netdev_get_name(netdev), netdev_get_name(physdev),
+@@ -2502,15 +2526,15 @@ out:
+     return ret;
+ }
+ 
+-static int
+-netdev_offload_dpdk_flow_flush(struct netdev *netdev)
++static void
++flush_netdev_flows_in_related(struct netdev *netdev, struct netdev *related)
+ {
+-    struct cmap *map = offload_data_map(netdev);
+-    struct ufid_to_rte_flow_data *data;
+     unsigned int tid = netdev_offload_thread_id();
++    struct cmap *map = offload_data_map(related);
++    struct ufid_to_rte_flow_data *data;
+ 
+     if (!map) {
+-        return -1;
++        return;
+     }
+ 
+     CMAP_FOR_EACH (data, node, map) {
+@@ -2521,6 +2545,31 @@ netdev_offload_dpdk_flow_flush(struct netdev *netdev)
+             netdev_offload_dpdk_flow_destroy(data);
+         }
+     }
++}
++
++static bool
++flush_in_vport_cb(struct netdev *vport,
++                  odp_port_t odp_port OVS_UNUSED,
++                  void *aux)
++{
++    struct netdev *netdev = aux;
++
++    /* Only vports are related to physical devices. */
++    if (netdev_vport_is_vport_class(vport->netdev_class)) {
++        flush_netdev_flows_in_related(netdev, vport);
++    }
++
++    return false;
++}
++
++static int
++netdev_offload_dpdk_flow_flush(struct netdev *netdev)
++{
++    flush_netdev_flows_in_related(netdev, netdev);
++
++    if (!netdev_vport_is_vport_class(netdev->netdev_class)) {
++        netdev_ports_traverse(netdev->dpif_type, flush_in_vport_cb, netdev);
++    }
+ 
+     return 0;
+ }
 diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c
 index 9845e8d3fe..6fa27d1dda 100644
 --- a/lib/netdev-offload-tc.c
@@ -60189,7 +60242,7 @@ index 1683ec8781..e7f7ea7a95 100644
  
  #endif /* bond.h */
 diff --git a/ofproto/connmgr.c b/ofproto/connmgr.c
-index fa8f6cd0e8..508d05c265 100644
+index fa8f6cd0e8..3180884d03 100644
 --- a/ofproto/connmgr.c
 +++ b/ofproto/connmgr.c
 @@ -310,8 +310,8 @@ connmgr_destroy(struct connmgr *mgr)
@@ -60248,6 +60301,15 @@ index fa8f6cd0e8..508d05c265 100644
          if (b->used <= limit) {
              ofconn_send_error(ofconn, b->msg, OFPERR_OFPBFC_TIMEOUT);
              ofp_bundle_remove__(ofconn, b);
+@@ -1209,7 +1209,7 @@ ofconn_create(struct ofservice *ofservice, struct rconn *rconn,
+     hmap_init(&ofconn->bundles);
+     ofconn->next_bundle_expiry_check = time_msec() + BUNDLE_EXPIRY_INTERVAL;
+ 
+-    ofconn_set_rate_limit(ofconn, settings->rate_limit, settings->burst_limit);
++    ofservice_reconfigure(ofservice, settings);
+ 
+     ovs_mutex_unlock(&ofproto_mutex);
+ }
 @@ -1247,8 +1247,8 @@ ofconn_destroy(struct ofconn *ofconn)
  
      free(ofconn->async_cfg);
@@ -60288,7 +60350,37 @@ index fa8f6cd0e8..508d05c265 100644
      }
  }
  
-@@ -1953,8 +1961,8 @@ static void
+@@ -1907,10 +1915,7 @@ connmgr_count_hidden_rules(const struct connmgr *mgr)
+ }
+ 
+ /* Creates a new ofservice for 'target' in 'mgr'.  Returns 0 if successful,
+- * otherwise a positive errno value.
+- *
+- * ofservice_reconfigure() must be called to fully configure the new
+- * ofservice. */
++ * otherwise a positive errno value. */
+ static void
+ ofservice_create(struct connmgr *mgr, const char *target,
+                  const struct ofproto_controller *c)
+@@ -1920,7 +1925,8 @@ ofservice_create(struct connmgr *mgr, const char *target,
+     struct rconn *rconn = NULL;
+     if (!vconn_verify_name(target)) {
+         char *name = ofconn_make_name(mgr, target);
+-        rconn = rconn_create(5, 8, c->dscp, c->allowed_versions);
++        rconn = rconn_create(c->probe_interval, c->max_backoff,
++                             c->dscp, c->allowed_versions);
+         rconn_connect(rconn, target, name);
+         free(name);
+     } else if (!pvconn_verify_name(target)) {
+@@ -1943,7 +1949,6 @@ ofservice_create(struct connmgr *mgr, const char *target,
+     ofservice->rconn = rconn;
+     ofservice->pvconn = pvconn;
+     ofservice->s = *c;
+-    ofservice_reconfigure(ofservice, c);
+ 
+     VLOG_INFO("%s: added %s controller \"%s\"",
+               mgr->name, ofconn_type_to_string(ofservice->type), target);
+@@ -1953,8 +1958,8 @@ static void
  ofservice_close_all(struct ofservice *ofservice)
      OVS_REQUIRES(ofproto_mutex)
  {
@@ -69077,7 +69169,7 @@ index 736d9809cb..b18f0fbc1e 100644
  /|ERR|/p
  /|EMER|/p" ${logs}
 diff --git a/tests/ofproto.at b/tests/ofproto.at
-index 156d3e058c..32bde5b5a2 100644
+index 156d3e058c..2ad5741fa1 100644
 --- a/tests/ofproto.at
 +++ b/tests/ofproto.at
 @@ -3108,7 +3108,7 @@ vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x1234
@@ -69125,7 +69217,7 @@ index 156d3e058c..32bde5b5a2 100644
  OFPT_BARRIER_REPLY (OF1.3):
  ])
  
-@@ -6448,3 +6448,185 @@ verify_deleted
+@@ -6448,3 +6448,213 @@ verify_deleted
  
  OVS_VSWITCHD_STOP(["/<invalid/d"])
  AT_CLEANUP
@@ -69311,6 +69403,34 @@ index 156d3e058c..32bde5b5a2 100644
 +
 +OVS_VSWITCHD_STOP
 +AT_CLEANUP
++
++AT_SETUP([ofproto - configure inactivity probe interval])
++
++# Set 6 second inactivity probe interval (default is 5 seconds).
++OVS_VSWITCHD_START([set-controller br0 unix:testcontroller \
++                   -- set Controller br0 inactivity_probe=6000], [], [],
++                   [-vfile:rconn:dbg])
++
++# Start test openflow controller.
++AT_CHECK([ovs-testcontroller -vsyslog:off --detach --no-chdir --pidfile punix:testcontroller],
++         [0], [ignore])
++on_exit 'kill `cat ovs-testcontroller.pid`'
++OVS_WAIT_UNTIL([test -e testcontroller])
++
++# After 6 seconds of inactivity there should be a log message.
++OVS_WAIT_UNTIL([grep "idle 6 seconds, sending inactivity probe" ovs-vswitchd.log])
++
++# Restart ovs-vswitchd with an empty ovs-vswitchd log file.
++OVS_APP_EXIT_AND_WAIT([ovs-vswitchd])
++mv ovs-vswitchd.log ovs-vswitchd_1.log
++AT_CHECK([ovs-vswitchd --enable-dummy --disable-system --disable-system-route --detach \
++         --no-chdir --pidfile --log-file -vfile:rconn:dbg -vvconn -vofproto_dpif -vunixctl],
++         [0], [], [stderr])
++
++# After 6 seconds of inactivity there should be a log message.
++OVS_WAIT_UNTIL([grep "idle 6 seconds, sending inactivity probe" ovs-vswitchd.log])
++OVS_VSWITCHD_STOP(["/br0<->unix:testcontroller: connection failed/d"])
++AT_CLEANUP
 diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at
 index 66545da572..d09dbb4cd5 100644
 --- a/tests/ovs-macros.at
@@ -75087,7 +75207,7 @@ index 407bfc60eb..2b2afb44ca 100644
 +    }
  }
 diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
-index 0c66326171..0c8534f142 100644
+index 0c66326171..60e2a494d2 100644
 --- a/vswitchd/vswitch.xml
 +++ b/vswitchd/vswitch.xml
 @@ -222,6 +222,19 @@
@@ -75119,6 +75239,17 @@ index 0c66326171..0c8534f142 100644
                  type='{"type": "integer"}'>
            The port path cost.  The Port's contribution, when it is
            the Root Port, to the Root Path Cost for the Bridge.  By default the
+@@ -3636,6 +3649,10 @@ ovs-vsctl add-port br0 p0 -- set Interface p0 type=patch options:peer=p1 \
+             Device ID of PCI device.
+           </column>
+ 
++          <column name="status" key="dpdk-vf-mac">
++            Ethernet address set for this VF interface. Only reported for dpdk
++            VF representors.
++          </column>
+       </group>
+     </group>
+ 
 diff --git a/vtep/vtep-ctl.c b/vtep/vtep-ctl.c
 index ab552457d9..99c4adcd53 100644
 --- a/vtep/vtep-ctl.c
diff --git a/SPECS/openvswitch2.17.spec b/SPECS/openvswitch2.17.spec
index 082b109..3707218 100644
--- a/SPECS/openvswitch2.17.spec
+++ b/SPECS/openvswitch2.17.spec
@@ -57,7 +57,7 @@ Summary: Open vSwitch
 Group: System Environment/Daemons daemon/database/utilities
 URL: http://www.openvswitch.org/
 Version: 2.17.0
-Release: 109%{?dist}
+Release: 112%{?dist}
 
 # Nearly all of openvswitch is ASL 2.0.  The bugtool is LGPLv2+, and the
 # lib/sflow*.[ch] files are SISSL
@@ -751,6 +751,23 @@ exit 0
 %endif
 
 %changelog
+* Thu Oct 12 2023 Timothy Redaelli <tredaelli@redhat.com> - 2.17.0-112
+- redhat: use rhpkg push instead of git push [RH git: 7b22bbc0dd]
+
+
+* Tue Oct 10 2023 Open vSwitch CI <ovs-ci@redhat.com> - 2.17.0-111
+- Merging upstream branch-2.17 [RH git: f747af68b3]
+    Commit list:
+    fac770a0a7 netdev-dpdk: Document status options for VF MAC address.
+    79ab2eeb16 netdev-offload-dpdk: Fix flushing of a physdev.
+
+
+* Thu Oct 05 2023 Open vSwitch CI <ovs-ci@redhat.com> - 2.17.0-110
+- Merging upstream branch-2.17 [RH git: 051758b3e3]
+    Commit list:
+    4ced485f8d connmgr: Fix ofconn configuration on vswitchd startup.
+
+
 * Mon Sep 18 2023 Open vSwitch CI <ovs-ci@redhat.com> - 2.17.0-109
 - Merging upstream branch-2.17 [RH git: 03e330a147]
     Commit list: