Signed-off-by: Felix Huettner <[email protected]>
---
northd/en-routes-sync.c | 23 +++++++++++++++++++++++
northd/en-routes-sync.h | 2 ++
northd/inc-proc-northd.c | 3 ++-
3 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/northd/en-routes-sync.c b/northd/en-routes-sync.c
index dd0c914dd..f53d581ab 100644
--- a/northd/en-routes-sync.c
+++ b/northd/en-routes-sync.c
@@ -53,6 +53,29 @@ routes_sync_destroy(struct routes_sync_data *data)
hmap_destroy(&data->parsed_routes);
}
+bool
+routes_sync_northd_change_handler(struct engine_node *node,
+ void *data OVS_UNUSED)
+{
+ struct northd_data *northd_data = engine_get_input_data("northd", node);
+ if (!northd_has_tracked_data(&northd_data->trk_data)) {
+ return false;
+ }
+
+ /* This node uses the below data from the en_northd engine node.
+ * See (lr_stateful_get_input_data())
+ * 1. northd_data->lr_datapaths
+ * 2. northd_data->lr_ports
+ * This data gets updated when a logical router or logical router port
+ * is created or deleted.
+ * Northd engine node presently falls back to full recompute when
+ * this happens and so does this node.
+ * Note: When we add I-P to the created/deleted logical routers or
+ * logical router ports, we need to revisit this handler.
+ */
+ return true;
+}
+
void
*en_routes_sync_init(struct engine_node *node OVS_UNUSED,
struct engine_arg *arg OVS_UNUSED)
diff --git a/northd/en-routes-sync.h b/northd/en-routes-sync.h
index d784d38d7..391f17452 100644
--- a/northd/en-routes-sync.h
+++ b/northd/en-routes-sync.h
@@ -16,6 +16,8 @@
#include "lib/inc-proc-eng.h"
+bool routes_sync_northd_change_handler(struct engine_node *node,
+ void *data OVS_UNUSED);
void *en_routes_sync_init(struct engine_node *, struct engine_arg *);
void en_routes_sync_cleanup(void *data);
void en_routes_sync_run(struct engine_node *, void *data);
diff --git a/northd/inc-proc-northd.c b/northd/inc-proc-northd.c
index 5ce9832ea..ad4a25fa0 100644
--- a/northd/inc-proc-northd.c
+++ b/northd/inc-proc-northd.c
@@ -270,7 +270,8 @@ void inc_proc_northd_init(struct ovsdb_idl_loop *nb,
engine_add_input(&en_routes_sync, &en_routes, NULL);
engine_add_input(&en_routes_sync, &en_sb_route, NULL);
- engine_add_input(&en_routes_sync, &en_northd, NULL);
+ engine_add_input(&en_routes_sync, &en_northd,
+ routes_sync_northd_change_handler);
engine_add_input(&en_routes_sync, &en_lr_stateful, NULL);
engine_add_input(&en_sync_meters, &en_nb_acl, NULL);
--
2.47.0
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev