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