This feature flag informs ovn-northd whether all hypervisors that are
part of the OVN cluster support the new ct_state_save() logical action.

A subsequent patch will use this new action to avoid generating OpenFlow
rules that cannot be offloaded to hardware on specific NICs.  This flag
is needed in order to avoid minor-version upgrade issues (if
ovn-controller is upgraded after ovn-northd).

Signed-off-by: Dumitru Ceara <dce...@redhat.com>
---
 controller/chassis.c      |  7 +++++++
 include/ovn/features.h    |  1 +
 northd/en-global-config.c | 10 ++++++++++
 northd/en-global-config.h |  1 +
 4 files changed, 19 insertions(+)

diff --git a/controller/chassis.c b/controller/chassis.c
index c28a26a970..7616069b72 100644
--- a/controller/chassis.c
+++ b/controller/chassis.c
@@ -399,6 +399,7 @@ chassis_build_other_config(const struct ovs_chassis_cfg 
*ovs_cfg,
     smap_replace(config, OVN_FEATURE_CT_NEXT_ZONE, "true");
     smap_replace(config, OVN_FEATURE_CT_LABEL_FLUSH,
                  ovs_cfg->ct_label_flush ? "true" :"false");
+    smap_replace(config, OVN_FEATURE_CT_STATE_SAVE, "true");
 }
 
 /*
@@ -572,6 +573,11 @@ chassis_other_config_changed(const struct ovs_chassis_cfg 
*ovs_cfg,
         return true;
     }
 
+    if (!smap_get_bool(&chassis_rec->other_config, OVN_FEATURE_CT_STATE_SAVE,
+                       false)) {
+        return true;
+    }
+
     return false;
 }
 
@@ -731,6 +737,7 @@ update_supported_sset(struct sset *supported)
     sset_add(supported, OVN_FEATURE_SAMPLE_WITH_REGISTERS);
     sset_add(supported, OVN_FEATURE_CT_NEXT_ZONE);
     sset_add(supported, OVN_FEATURE_CT_LABEL_FLUSH);
+    sset_add(supported, OVN_FEATURE_CT_STATE_SAVE);
 }
 
 static void
diff --git a/include/ovn/features.h b/include/ovn/features.h
index 24c72c2211..6e9c05e80b 100644
--- a/include/ovn/features.h
+++ b/include/ovn/features.h
@@ -32,6 +32,7 @@
 #define OVN_FEATURE_SAMPLE_WITH_REGISTERS "ovn-sample-with-registers"
 #define OVN_FEATURE_CT_NEXT_ZONE "ct-next-zone"
 #define OVN_FEATURE_CT_LABEL_FLUSH "ct-label-flush"
+#define OVN_FEATURE_CT_STATE_SAVE "ct-state-save"
 
 /* OVS datapath supported features.  Based on availability OVN might generate
  * different types of openflows.
diff --git a/northd/en-global-config.c b/northd/en-global-config.c
index c103b137f6..f08c612962 100644
--- a/northd/en-global-config.c
+++ b/northd/en-global-config.c
@@ -442,6 +442,7 @@ northd_enable_all_features(struct ed_type_global_config 
*data)
         .sample_with_reg = true,
         .ct_next_zone = true,
         .ct_label_flush = true,
+        .ct_state_save = true,
     };
 }
 
@@ -530,6 +531,15 @@ build_chassis_features(const struct sbrec_chassis_table 
*sbrec_chassis_table,
             chassis_features->ct_label_flush) {
             chassis_features->ct_label_flush = false;
         }
+
+        bool ct_state_save =
+                smap_get_bool(&chassis->other_config,
+                              OVN_FEATURE_CT_STATE_SAVE,
+                              false);
+        if (!ct_state_save &&
+            chassis_features->ct_state_save) {
+            chassis_features->ct_state_save = false;
+        }
     }
 }
 
diff --git a/northd/en-global-config.h b/northd/en-global-config.h
index de88db18b5..1ec02cac5e 100644
--- a/northd/en-global-config.h
+++ b/northd/en-global-config.h
@@ -22,6 +22,7 @@ struct chassis_features {
     bool sample_with_reg;
     bool ct_next_zone;
     bool ct_label_flush;
+    bool ct_state_save;
 };
 
 struct global_config_tracked_data {
-- 
2.48.1

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to