@@ -532,8 +532,14 @@ build_chassis_features(const struct sbrec_chassis_table *sbrec_chassis_table,
SBREC_CHASSIS_TABLE_FOR_EACH (chassis, sbrec_chassis_table) {
/* Only consider local AZ chassis. Remote ones don't install
* flows generated by the local northd.
+ *
+ * Skip VTEP chassis too. Those are created by ovn-controller-vtep
+ * (which doesn't process logical flows at all) and therefore never
+ * advertise any feature in other_config. Taking them into account
+ * would disable features for the whole deployment.
*/
- if (smap_get_bool(&chassis->other_config, "is-remote", false)) {
+ if (smap_get_bool(&chassis->other_config, "is-remote", false) ||
+ smap_get_bool(&chassis->other_config, "is-vtep", false)) {
continue;
}
Chassis rows for VTEP physical switches are created by ovn-controller-vtep, which never processes logical flows and therefore never advertises any feature in other_config. northd code only skipped remote chassis, so a single VTEP chassis disabled every feature for the whole deployment. The most visible effect is ct_no_masked_label being turned off, which makes northd emit "ct_label.blocked" matches. That symbol was removed in f1f5c34f1acf ("northd: Assume all chassis support the "ct-no-masked-label" feature."), so any newer ovn-controller fails to parse ct_label actions during a rolling upgrade from version < 24.09. Skip VTEP chassis the same way remote ones are skipped. [1] https://github.com/ovn-org/ovn/commit/f1f5c34f1acfc01d625984e3b4ceeb840fb234b1 Fixes: 40fe94bd4d4c ("northd: Use ct_mark.blocked and ecmp_reply_port only when all chassis support it.") Signed-off-by: Alexandra Rukomoinikova <ARukomoinikova@k2.cloud> --- northd/en-global-config.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)