Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2144084

Signed-off-by: Xavier Simonart <[email protected]>
---
 lib/features.c | 16 ++++++++++------
 tests/ovn.at   | 18 ++++++++++++++++++
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/lib/features.c b/lib/features.c
index f15ec42bb..571e24ded 100644
--- a/lib/features.c
+++ b/lib/features.c
@@ -26,6 +26,7 @@
 #include "openvswitch/rconn.h"
 #include "openvswitch/ofp-msgs.h"
 #include "openvswitch/ofp-meter.h"
+#include "openvswitch/ofp-util.h"
 #include "ovn/features.h"
 
 VLOG_DEFINE_THIS_MODULE(features);
@@ -90,6 +91,8 @@ ovs_feature_rconn_setup(const char *br_name)
 static bool
 ovs_feature_get_openflow_cap(const char *br_name)
 {
+    struct ofpbuf *msg;
+
     if (!br_name) {
         return false;
     }
@@ -102,15 +105,14 @@ ovs_feature_get_openflow_cap(const char *br_name)
     }
 
     /* send new requests just after reconnect. */
-    if (conn_seq_no == rconn_get_connection_seqno(swconn)) {
-        return false;
+    if (conn_seq_no != rconn_get_connection_seqno(swconn)) {
+        /* dump datapath meter capabilities. */
+        msg = ofpraw_alloc(OFPRAW_OFPST13_METER_FEATURES_REQUEST,
+                           rconn_get_version(swconn), 0);
+        rconn_send(swconn, msg, NULL);
     }
 
     bool ret = false;
-    /* dump datapath meter capabilities. */
-    struct ofpbuf *msg = ofpraw_alloc(OFPRAW_OFPST13_METER_FEATURES_REQUEST,
-                                      rconn_get_version(swconn), 0);
-    rconn_send(swconn, msg, NULL);
     for (int i = 0; i < 50; i++) {
         msg = rconn_recv(swconn);
         if (!msg) {
@@ -137,6 +139,8 @@ ovs_feature_get_openflow_cap(const char *br_name)
                 }
             }
             conn_seq_no = rconn_get_connection_seqno(swconn);
+        } else if (type == OFPTYPE_ECHO_REQUEST) {
+            rconn_send(swconn, ofputil_encode_echo_reply(oh), NULL);
         }
         ofpbuf_delete(msg);
     }
diff --git a/tests/ovn.at b/tests/ovn.at
index cf1ea991d..3a1c231f5 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -33069,3 +33069,21 @@ check ovn-nbctl --wait=hv sync
 OVN_CLEANUP([hv1])
 AT_CLEANUP
 ])
+
+OVN_FOR_EACH_NORTHD([
+AT_SETUP([feature inactivity probe])
+ovn_start
+net_add n1
+
+sim_add hv1
+as hv1
+check ovs-vsctl add-br br-phys
+ovn_attach n1 br-phys 192.168.0.1
+
+# Wait for more than 2x 60 seconds
+sleep 125
+
+AT_CHECK([test -z "`grep disconnecting hv1/ovs-vswitchd.log`"])
+OVN_CLEANUP([hv1])
+AT_CLEANUP
+])
-- 
2.31.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to