From: Numan Siddique <num...@ovn.org>

en_northd engine nodes provides the created or updated logical switches
in its tracked data and en_ls_stateful node handles these changes.

Acked-by: Mark Michelson <mmich...@redhat.com>
Signed-off-by: Numan Siddique <num...@ovn.org>
---
 northd/en-ls-stateful.c | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/northd/en-ls-stateful.c b/northd/en-ls-stateful.c
index 448ccc3c4..5f4ebcb3c 100644
--- a/northd/en-ls-stateful.c
+++ b/northd/en-ls-stateful.c
@@ -131,12 +131,9 @@ ls_stateful_northd_handler(struct engine_node *node, void 
*data_)
         return EN_UNHANDLED;
     }
 
-    if (northd_has_lswitchs_in_tracked_data(&northd_data->trk_data)) {
-        return EN_UNHANDLED;
-    }
-
     if (!northd_has_ls_lbs_in_tracked_data(&northd_data->trk_data) &&
-        !northd_has_ls_acls_in_tracked_data(&northd_data->trk_data)) {
+        !northd_has_ls_acls_in_tracked_data(&northd_data->trk_data) &&
+        !northd_has_lswitches_in_tracked_data(&northd_data->trk_data)) {
         return EN_HANDLED_UNCHANGED;
     }
 
@@ -145,6 +142,15 @@ ls_stateful_northd_handler(struct engine_node *node, void 
*data_)
     struct ed_type_ls_stateful *data = data_;
     struct hmapx_node *hmapx_node;
 
+    HMAPX_FOR_EACH (hmapx_node, &nd_changes->trk_switches.crupdated) {
+        const struct ovn_datapath *od = hmapx_node->data;
+
+        if (!ls_stateful_table_find_(&data->table, od->nbs)) {
+            ls_stateful_record_create(&data->table, od,
+                                      input_data.ls_port_groups);
+        }
+    }
+
     HMAPX_FOR_EACH (hmapx_node, &nd_changes->ls_with_changed_lbs) {
         const struct ovn_datapath *od = hmapx_node->data;
 
@@ -170,6 +176,20 @@ ls_stateful_northd_handler(struct engine_node *node, void 
*data_)
         hmapx_add(&data->trk_data.crupdated, ls_stateful_rec);
     }
 
+    HMAPX_FOR_EACH (hmapx_node, &nd_changes->trk_switches.deleted) {
+        const struct ovn_datapath *od = hmapx_node->data;
+        struct ls_stateful_record *ls_stateful_rec =
+            ls_stateful_table_find_(&data->table, od->nbs);
+
+        if (ls_stateful_rec &&
+            !ovn_datapath_find(&northd_data->ls_datapaths.datapaths,
+                               &od->nbs->header_.uuid)) {
+            hmap_remove(&data->table.entries, &ls_stateful_rec->key_node);
+            /* Add the ls_stateful_rec to the tracking data. */
+            hmapx_add(&data->trk_data.crupdated, ls_stateful_rec);
+        }
+    }
+
     if (ls_stateful_has_tracked_data(&data->trk_data)) {
         return EN_HANDLED_UPDATED;
     }
-- 
2.50.1

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

Reply via email to