From: Aleksandr Smirnov <[email protected]>

    northd does not populate Port_Binding:additional-chassis to
    Ha_Chassis_Group:ref_chassis, so, bfd session is not created
    for such chassis.

    The fix populates additional chassis to ref chassis.

Signed-off-by: Aleksandr Smirnov <[email protected]>
Reported-at: 
https://mail.openvswitch.org/pipermail/ovs-dev/2024-September/417293.html
Reported-by: Vladislav Odintsov <[email protected]>
Tested-by: Vladislav Odintsov <[email protected]>
---
 northd/northd.c     | 13 +++++++++++--
 tests/ovn-northd.at |  7 +++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/northd/northd.c b/northd/northd.c
index 0aa0de637..088617aae 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -19041,7 +19041,14 @@ collect_lr_groups_for_ha_chassis_groups(const struct 
sbrec_port_binding *sb,
     }
 
     hmapx_add(lr_groups, lr_group);
-    hmapx_add(&lr_group->tmp_ha_ref_chassis, sb->chassis);
+
+    if (sb->chassis) {
+        hmapx_add(&lr_group->tmp_ha_ref_chassis, sb->chassis);
+    }
+
+    for (size_t i = 0; i < sb->n_additional_chassis; i++) {
+        hmapx_add(&lr_group->tmp_ha_ref_chassis, sb->additional_chassis[i]);
+    }
 }
 
 static void
@@ -19158,7 +19165,9 @@ handle_port_binding_changes(struct ovsdb_idl_txn 
*ovnsb_txn,
             sbrec_port_binding_set_up(op->sb, &up, 1);
         }
 
-        if (build_ha_chassis_ref && ovnsb_txn && sb->chassis) {
+        if (build_ha_chassis_ref
+            && ovnsb_txn
+            && (sb->chassis || sb->n_additional_chassis)) {
             /* Check and collect the chassis which has claimed this 'sb'
              * in relation to LR groups. */
             collect_lr_groups_for_ha_chassis_groups(sb, op, &lr_groups);
diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
index d6a8c4640..e295c721d 100644
--- a/tests/ovn-northd.at
+++ b/tests/ovn-northd.at
@@ -572,6 +572,7 @@ check ovn-sbctl chassis-add ch2 geneve 127.0.0.3
 check ovn-sbctl chassis-add ch3 geneve 127.0.0.4
 check ovn-sbctl chassis-add comp1 geneve 127.0.0.5
 check ovn-sbctl chassis-add comp2 geneve 127.0.0.6
+check ovn-sbctl chassis-add cadd1 geneve 127.0.0.7
 
 check ovn-nbctl lrp-add lr0 lr0-sw0 00:00:20:20:12:14 10.0.0.1/24
 check ovn-nbctl lsp-add sw0 sw0-lr0
@@ -584,11 +585,17 @@ wait_row_count nb:Logical_Switch_Port 1 name=sw0-p1 
up=true
 
 comp1_ch_uuid=$(fetch_column Chassis _uuid name=comp1)
 comp2_ch_uuid=$(fetch_column Chassis _uuid name=comp2)
+cadd1_ch_uuid=$(fetch_column Chassis _uuid name=cadd1)
+
 ch2_ch_uuid=$comp1_ch_uuid
 
 # Check ref_chassis.
 echo "comp1_ch_uuid = $comp1_ch_uuid"
 wait_column "$comp1_ch_uuid" HA_Chassis_Group ref_chassis
+ovn-sbctl set Port_Binding sw0-p1 additional_chassis=$cadd1_ch_uuid
+wait_column "$cadd1_ch_uuid $comp1_ch_uuid" HA_Chassis_Group ref_chassis
+ovn-sbctl clear Port_Binding sw0-p1 additional_chassis
+wait_column "$comp1_ch_uuid" HA_Chassis_Group ref_chassis
 
 # unbind sw0-p1
 ovn-sbctl lsp-unbind sw0-p1
-- 
2.46.2

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

Reply via email to