Re: [ovs-dev] [PATCH ovn v2 02/18] northd: Track ovn_datapaths in northd engine track data.

2023-12-05 Thread Numan Siddique
On Thu, Nov 23, 2023 at 6:24 AM Dumitru Ceara  wrote:

> On 11/15/23 06:30, Han Zhou wrote:
> > On Thu, Oct 26, 2023 at 11:14 AM  wrote:
> >>
> >> From: Numan Siddique 
> >>
> >> northd engine tracked data now also stores the logical switches
> >> and logical routers that got updated due to the changed load balancers.
> >>
> >> Eg 1.  For this command 'ovn-nbctl ls-lb-add sw0 lb1 -- lr-lb-add lr0
> >> lb1', northd engine tracking data will store 'sw0' and 'lr0'.
> >>
> >> Eg 2.  If load balancer lb1 is already associated with 'sw0' and 'lr0'
> >> then for this command 'ovn-nbctl set load_balancer 
> >> vips:10.0.0.10=20.0.0.20', northd engine tracking data will store
> >> 'sw0' and 'lr0'.
> >>
> >> An upcoming commit will make use of this tracked data.
> >>
> >> Signed-off-by: Numan Siddique 
> >> ---
> >>  northd/northd.c | 34 +-
> >>  northd/northd.h | 12 
> >>  2 files changed, 45 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/northd/northd.c b/northd/northd.c
> >> index df22a9c658..9ce1b2cb5a 100644
> >> --- a/northd/northd.c
> >> +++ b/northd/northd.c
> >> @@ -5146,6 +5146,8 @@ destroy_northd_data_tracked_changes(struct
> > northd_data *nd)
> >>  struct northd_tracked_data *trk_changes = >trk_northd_changes;
> >>  destroy_tracked_ovn_ports(_changes->trk_ovn_ports);
> >>  destroy_tracked_lbs(_changes->trk_lbs);
> >> +hmapx_clear(_changes->ls_with_changed_lbs.crupdated);
> >> +hmapx_clear(_changes->lr_with_changed_lbs.crupdated);
> >>  nd->change_tracked = false;
> >>  }
> >>
> >> @@ -5158,6 +5160,8 @@ init_northd_tracked_data(struct northd_data *nd)
> >>  hmapx_init(_changes->trk_ovn_ports.deleted);
> >>  hmapx_init(_changes->trk_lbs.crupdated);
> >>  hmapx_init(_changes->trk_lbs.deleted);
> >> +hmapx_init(_changes->ls_with_changed_lbs.crupdated);
> >> +hmapx_init(_changes->lr_with_changed_lbs.crupdated);
> >>  }
> >>
> >>  static void
> >> @@ -5169,6 +5173,8 @@ destroy_northd_tracked_data(struct northd_data
> *nd)
> >>  hmapx_destroy(_changes->trk_ovn_ports.deleted);
> >>  hmapx_destroy(_changes->trk_lbs.crupdated);
> >>  hmapx_destroy(_changes->trk_lbs.deleted);
> >> +hmapx_destroy(_changes->ls_with_changed_lbs.crupdated);
> >> +hmapx_destroy(_changes->lr_with_changed_lbs.crupdated);
> >>  }
> >>
> >>
> >> @@ -5179,7 +5185,10 @@ northd_has_tracked_data(struct
> northd_tracked_data
> > *trk_nd_changes)
> >>  || !hmapx_is_empty(_nd_changes->trk_ovn_ports.updated)
> >>  || !hmapx_is_empty(_nd_changes->trk_ovn_ports.deleted)
> >>  || !hmapx_is_empty(_nd_changes->trk_lbs.crupdated)
> >> -|| !hmapx_is_empty(_nd_changes->trk_lbs.deleted));
> >> +|| !hmapx_is_empty(_nd_changes->trk_lbs.deleted)
> >> +||
> > !hmapx_is_empty(_nd_changes->ls_with_changed_lbs.crupdated)
> >> +||
> > !hmapx_is_empty(_nd_changes->lr_with_changed_lbs.crupdated)
> >> +);
> >>  }
> >>
> >>  bool
> >> @@ -5188,6 +5197,8 @@ northd_has_only_ports_in_tracked_data(
> >>  {
> >>  return (hmapx_is_empty(_nd_changes->trk_lbs.crupdated)
> >>  && hmapx_is_empty(_nd_changes->trk_lbs.deleted)
> >> +&&
> > hmapx_is_empty(_nd_changes->ls_with_changed_lbs.crupdated)
> >> +&&
> > hmapx_is_empty(_nd_changes->lr_with_changed_lbs.crupdated)
> >>  && (!hmapx_is_empty(_nd_changes->trk_ovn_ports.created)
> >>  || !hmapx_is_empty(_nd_changes->trk_ovn_ports.updated)
> >>  ||
> !hmapx_is_empty(_nd_changes->trk_ovn_ports.deleted)));
> >> @@ -5828,6 +5839,9 @@ northd_handle_lb_data_changes(struct
> > tracked_lb_data *trk_lb_data,
> >> lb_dps->nb_ls_map) {
> >>  od = ls_datapaths->array[index];
> >>  init_lb_for_datapath(od);
> >> +
> >> +/* Add the ls datapath to the northd tracked data. */
> >> +hmapx_add(_changes->ls_with_changed_lbs.crupdated, od);
> >>  }
> >>
> >>  hmap_remove(lb_datapaths_map, _dps->hmap_node);
> >> @@ -5909,6 +5923,9 @@ northd_handle_lb_data_changes(struct
> > tracked_lb_data *trk_lb_data,
> >>
> >>  /* Re-evaluate 'od->has_lb_vip' */
> >>  init_lb_for_datapath(od);
> >> +
> >> +/* Add the ls datapath to the northd tracked data. */
> >> +hmapx_add(_changes->ls_with_changed_lbs.crupdated, od);
> >>  }
> >>
> >>  LIST_FOR_EACH (codlb, list_node, _lb_data->crupdated_lr_lbs) {
> >> @@ -5954,6 +5971,9 @@ northd_handle_lb_data_changes(struct
> > tracked_lb_data *trk_lb_data,
> >>
> >>  /* Re-evaluate 'od->has_lb_vip' */
> >>  init_lb_for_datapath(od);
> >> +
> >> +/* Add the lr datapath to the northd tracked data. */
> >> +hmapx_add(_changes->lr_with_changed_lbs.crupdated, od);
> >>  }
> >>
> >>  HMAP_FOR_EACH (clb, hmap_node, _lb_data->crupdated_lbs) {
> >> @@ -5968,6 +5988,9 @@ 

Re: [ovs-dev] [PATCH ovn v2 02/18] northd: Track ovn_datapaths in northd engine track data.

2023-11-23 Thread Dumitru Ceara
On 11/15/23 06:30, Han Zhou wrote:
> On Thu, Oct 26, 2023 at 11:14 AM  wrote:
>>
>> From: Numan Siddique 
>>
>> northd engine tracked data now also stores the logical switches
>> and logical routers that got updated due to the changed load balancers.
>>
>> Eg 1.  For this command 'ovn-nbctl ls-lb-add sw0 lb1 -- lr-lb-add lr0
>> lb1', northd engine tracking data will store 'sw0' and 'lr0'.
>>
>> Eg 2.  If load balancer lb1 is already associated with 'sw0' and 'lr0'
>> then for this command 'ovn-nbctl set load_balancer 
>> vips:10.0.0.10=20.0.0.20', northd engine tracking data will store
>> 'sw0' and 'lr0'.
>>
>> An upcoming commit will make use of this tracked data.
>>
>> Signed-off-by: Numan Siddique 
>> ---
>>  northd/northd.c | 34 +-
>>  northd/northd.h | 12 
>>  2 files changed, 45 insertions(+), 1 deletion(-)
>>
>> diff --git a/northd/northd.c b/northd/northd.c
>> index df22a9c658..9ce1b2cb5a 100644
>> --- a/northd/northd.c
>> +++ b/northd/northd.c
>> @@ -5146,6 +5146,8 @@ destroy_northd_data_tracked_changes(struct
> northd_data *nd)
>>  struct northd_tracked_data *trk_changes = >trk_northd_changes;
>>  destroy_tracked_ovn_ports(_changes->trk_ovn_ports);
>>  destroy_tracked_lbs(_changes->trk_lbs);
>> +hmapx_clear(_changes->ls_with_changed_lbs.crupdated);
>> +hmapx_clear(_changes->lr_with_changed_lbs.crupdated);
>>  nd->change_tracked = false;
>>  }
>>
>> @@ -5158,6 +5160,8 @@ init_northd_tracked_data(struct northd_data *nd)
>>  hmapx_init(_changes->trk_ovn_ports.deleted);
>>  hmapx_init(_changes->trk_lbs.crupdated);
>>  hmapx_init(_changes->trk_lbs.deleted);
>> +hmapx_init(_changes->ls_with_changed_lbs.crupdated);
>> +hmapx_init(_changes->lr_with_changed_lbs.crupdated);
>>  }
>>
>>  static void
>> @@ -5169,6 +5173,8 @@ destroy_northd_tracked_data(struct northd_data *nd)
>>  hmapx_destroy(_changes->trk_ovn_ports.deleted);
>>  hmapx_destroy(_changes->trk_lbs.crupdated);
>>  hmapx_destroy(_changes->trk_lbs.deleted);
>> +hmapx_destroy(_changes->ls_with_changed_lbs.crupdated);
>> +hmapx_destroy(_changes->lr_with_changed_lbs.crupdated);
>>  }
>>
>>
>> @@ -5179,7 +5185,10 @@ northd_has_tracked_data(struct northd_tracked_data
> *trk_nd_changes)
>>  || !hmapx_is_empty(_nd_changes->trk_ovn_ports.updated)
>>  || !hmapx_is_empty(_nd_changes->trk_ovn_ports.deleted)
>>  || !hmapx_is_empty(_nd_changes->trk_lbs.crupdated)
>> -|| !hmapx_is_empty(_nd_changes->trk_lbs.deleted));
>> +|| !hmapx_is_empty(_nd_changes->trk_lbs.deleted)
>> +||
> !hmapx_is_empty(_nd_changes->ls_with_changed_lbs.crupdated)
>> +||
> !hmapx_is_empty(_nd_changes->lr_with_changed_lbs.crupdated)
>> +);
>>  }
>>
>>  bool
>> @@ -5188,6 +5197,8 @@ northd_has_only_ports_in_tracked_data(
>>  {
>>  return (hmapx_is_empty(_nd_changes->trk_lbs.crupdated)
>>  && hmapx_is_empty(_nd_changes->trk_lbs.deleted)
>> +&&
> hmapx_is_empty(_nd_changes->ls_with_changed_lbs.crupdated)
>> +&&
> hmapx_is_empty(_nd_changes->lr_with_changed_lbs.crupdated)
>>  && (!hmapx_is_empty(_nd_changes->trk_ovn_ports.created)
>>  || !hmapx_is_empty(_nd_changes->trk_ovn_ports.updated)
>>  || !hmapx_is_empty(_nd_changes->trk_ovn_ports.deleted)));
>> @@ -5828,6 +5839,9 @@ northd_handle_lb_data_changes(struct
> tracked_lb_data *trk_lb_data,
>> lb_dps->nb_ls_map) {
>>  od = ls_datapaths->array[index];
>>  init_lb_for_datapath(od);
>> +
>> +/* Add the ls datapath to the northd tracked data. */
>> +hmapx_add(_changes->ls_with_changed_lbs.crupdated, od);
>>  }
>>
>>  hmap_remove(lb_datapaths_map, _dps->hmap_node);
>> @@ -5909,6 +5923,9 @@ northd_handle_lb_data_changes(struct
> tracked_lb_data *trk_lb_data,
>>
>>  /* Re-evaluate 'od->has_lb_vip' */
>>  init_lb_for_datapath(od);
>> +
>> +/* Add the ls datapath to the northd tracked data. */
>> +hmapx_add(_changes->ls_with_changed_lbs.crupdated, od);
>>  }
>>
>>  LIST_FOR_EACH (codlb, list_node, _lb_data->crupdated_lr_lbs) {
>> @@ -5954,6 +5971,9 @@ northd_handle_lb_data_changes(struct
> tracked_lb_data *trk_lb_data,
>>
>>  /* Re-evaluate 'od->has_lb_vip' */
>>  init_lb_for_datapath(od);
>> +
>> +/* Add the lr datapath to the northd tracked data. */
>> +hmapx_add(_changes->lr_with_changed_lbs.crupdated, od);
>>  }
>>
>>  HMAP_FOR_EACH (clb, hmap_node, _lb_data->crupdated_lbs) {
>> @@ -5968,6 +5988,9 @@ northd_handle_lb_data_changes(struct
> tracked_lb_data *trk_lb_data,
>>  od = ls_datapaths->array[index];
>>  /* Re-evaluate 'od->has_lb_vip' */
>>  init_lb_for_datapath(od);
>> +
>> +/* Add the ls datapath to the northd tracked data. */
>> +

Re: [ovs-dev] [PATCH ovn v2 02/18] northd: Track ovn_datapaths in northd engine track data.

2023-11-14 Thread Han Zhou
On Thu, Oct 26, 2023 at 11:14 AM  wrote:
>
> From: Numan Siddique 
>
> northd engine tracked data now also stores the logical switches
> and logical routers that got updated due to the changed load balancers.
>
> Eg 1.  For this command 'ovn-nbctl ls-lb-add sw0 lb1 -- lr-lb-add lr0
> lb1', northd engine tracking data will store 'sw0' and 'lr0'.
>
> Eg 2.  If load balancer lb1 is already associated with 'sw0' and 'lr0'
> then for this command 'ovn-nbctl set load_balancer 
> vips:10.0.0.10=20.0.0.20', northd engine tracking data will store
> 'sw0' and 'lr0'.
>
> An upcoming commit will make use of this tracked data.
>
> Signed-off-by: Numan Siddique 
> ---
>  northd/northd.c | 34 +-
>  northd/northd.h | 12 
>  2 files changed, 45 insertions(+), 1 deletion(-)
>
> diff --git a/northd/northd.c b/northd/northd.c
> index df22a9c658..9ce1b2cb5a 100644
> --- a/northd/northd.c
> +++ b/northd/northd.c
> @@ -5146,6 +5146,8 @@ destroy_northd_data_tracked_changes(struct
northd_data *nd)
>  struct northd_tracked_data *trk_changes = >trk_northd_changes;
>  destroy_tracked_ovn_ports(_changes->trk_ovn_ports);
>  destroy_tracked_lbs(_changes->trk_lbs);
> +hmapx_clear(_changes->ls_with_changed_lbs.crupdated);
> +hmapx_clear(_changes->lr_with_changed_lbs.crupdated);
>  nd->change_tracked = false;
>  }
>
> @@ -5158,6 +5160,8 @@ init_northd_tracked_data(struct northd_data *nd)
>  hmapx_init(_changes->trk_ovn_ports.deleted);
>  hmapx_init(_changes->trk_lbs.crupdated);
>  hmapx_init(_changes->trk_lbs.deleted);
> +hmapx_init(_changes->ls_with_changed_lbs.crupdated);
> +hmapx_init(_changes->lr_with_changed_lbs.crupdated);
>  }
>
>  static void
> @@ -5169,6 +5173,8 @@ destroy_northd_tracked_data(struct northd_data *nd)
>  hmapx_destroy(_changes->trk_ovn_ports.deleted);
>  hmapx_destroy(_changes->trk_lbs.crupdated);
>  hmapx_destroy(_changes->trk_lbs.deleted);
> +hmapx_destroy(_changes->ls_with_changed_lbs.crupdated);
> +hmapx_destroy(_changes->lr_with_changed_lbs.crupdated);
>  }
>
>
> @@ -5179,7 +5185,10 @@ northd_has_tracked_data(struct northd_tracked_data
*trk_nd_changes)
>  || !hmapx_is_empty(_nd_changes->trk_ovn_ports.updated)
>  || !hmapx_is_empty(_nd_changes->trk_ovn_ports.deleted)
>  || !hmapx_is_empty(_nd_changes->trk_lbs.crupdated)
> -|| !hmapx_is_empty(_nd_changes->trk_lbs.deleted));
> +|| !hmapx_is_empty(_nd_changes->trk_lbs.deleted)
> +||
!hmapx_is_empty(_nd_changes->ls_with_changed_lbs.crupdated)
> +||
!hmapx_is_empty(_nd_changes->lr_with_changed_lbs.crupdated)
> +);
>  }
>
>  bool
> @@ -5188,6 +5197,8 @@ northd_has_only_ports_in_tracked_data(
>  {
>  return (hmapx_is_empty(_nd_changes->trk_lbs.crupdated)
>  && hmapx_is_empty(_nd_changes->trk_lbs.deleted)
> +&&
hmapx_is_empty(_nd_changes->ls_with_changed_lbs.crupdated)
> +&&
hmapx_is_empty(_nd_changes->lr_with_changed_lbs.crupdated)
>  && (!hmapx_is_empty(_nd_changes->trk_ovn_ports.created)
>  || !hmapx_is_empty(_nd_changes->trk_ovn_ports.updated)
>  || !hmapx_is_empty(_nd_changes->trk_ovn_ports.deleted)));
> @@ -5828,6 +5839,9 @@ northd_handle_lb_data_changes(struct
tracked_lb_data *trk_lb_data,
> lb_dps->nb_ls_map) {
>  od = ls_datapaths->array[index];
>  init_lb_for_datapath(od);
> +
> +/* Add the ls datapath to the northd tracked data. */
> +hmapx_add(_changes->ls_with_changed_lbs.crupdated, od);
>  }
>
>  hmap_remove(lb_datapaths_map, _dps->hmap_node);
> @@ -5909,6 +5923,9 @@ northd_handle_lb_data_changes(struct
tracked_lb_data *trk_lb_data,
>
>  /* Re-evaluate 'od->has_lb_vip' */
>  init_lb_for_datapath(od);
> +
> +/* Add the ls datapath to the northd tracked data. */
> +hmapx_add(_changes->ls_with_changed_lbs.crupdated, od);
>  }
>
>  LIST_FOR_EACH (codlb, list_node, _lb_data->crupdated_lr_lbs) {
> @@ -5954,6 +5971,9 @@ northd_handle_lb_data_changes(struct
tracked_lb_data *trk_lb_data,
>
>  /* Re-evaluate 'od->has_lb_vip' */
>  init_lb_for_datapath(od);
> +
> +/* Add the lr datapath to the northd tracked data. */
> +hmapx_add(_changes->lr_with_changed_lbs.crupdated, od);
>  }
>
>  HMAP_FOR_EACH (clb, hmap_node, _lb_data->crupdated_lbs) {
> @@ -5968,6 +5988,9 @@ northd_handle_lb_data_changes(struct
tracked_lb_data *trk_lb_data,
>  od = ls_datapaths->array[index];
>  /* Re-evaluate 'od->has_lb_vip' */
>  init_lb_for_datapath(od);
> +
> +/* Add the ls datapath to the northd tracked data. */
> +hmapx_add(_changes->ls_with_changed_lbs.crupdated, od);
>  }
>
>  BITMAP_FOR_EACH_1 (index, ods_size(lr_datapaths),
> @@ -5991,6 +6014,9 @@ 

[ovs-dev] [PATCH ovn v2 02/18] northd: Track ovn_datapaths in northd engine track data.

2023-10-26 Thread numans
From: Numan Siddique 

northd engine tracked data now also stores the logical switches
and logical routers that got updated due to the changed load balancers.

Eg 1.  For this command 'ovn-nbctl ls-lb-add sw0 lb1 -- lr-lb-add lr0
lb1', northd engine tracking data will store 'sw0' and 'lr0'.

Eg 2.  If load balancer lb1 is already associated with 'sw0' and 'lr0'
then for this command 'ovn-nbctl set load_balancer 
vips:10.0.0.10=20.0.0.20', northd engine tracking data will store
'sw0' and 'lr0'.

An upcoming commit will make use of this tracked data.

Signed-off-by: Numan Siddique 
---
 northd/northd.c | 34 +-
 northd/northd.h | 12 
 2 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/northd/northd.c b/northd/northd.c
index df22a9c658..9ce1b2cb5a 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -5146,6 +5146,8 @@ destroy_northd_data_tracked_changes(struct northd_data 
*nd)
 struct northd_tracked_data *trk_changes = >trk_northd_changes;
 destroy_tracked_ovn_ports(_changes->trk_ovn_ports);
 destroy_tracked_lbs(_changes->trk_lbs);
+hmapx_clear(_changes->ls_with_changed_lbs.crupdated);
+hmapx_clear(_changes->lr_with_changed_lbs.crupdated);
 nd->change_tracked = false;
 }
 
@@ -5158,6 +5160,8 @@ init_northd_tracked_data(struct northd_data *nd)
 hmapx_init(_changes->trk_ovn_ports.deleted);
 hmapx_init(_changes->trk_lbs.crupdated);
 hmapx_init(_changes->trk_lbs.deleted);
+hmapx_init(_changes->ls_with_changed_lbs.crupdated);
+hmapx_init(_changes->lr_with_changed_lbs.crupdated);
 }
 
 static void
@@ -5169,6 +5173,8 @@ destroy_northd_tracked_data(struct northd_data *nd)
 hmapx_destroy(_changes->trk_ovn_ports.deleted);
 hmapx_destroy(_changes->trk_lbs.crupdated);
 hmapx_destroy(_changes->trk_lbs.deleted);
+hmapx_destroy(_changes->ls_with_changed_lbs.crupdated);
+hmapx_destroy(_changes->lr_with_changed_lbs.crupdated);
 }
 
 
@@ -5179,7 +5185,10 @@ northd_has_tracked_data(struct northd_tracked_data 
*trk_nd_changes)
 || !hmapx_is_empty(_nd_changes->trk_ovn_ports.updated)
 || !hmapx_is_empty(_nd_changes->trk_ovn_ports.deleted)
 || !hmapx_is_empty(_nd_changes->trk_lbs.crupdated)
-|| !hmapx_is_empty(_nd_changes->trk_lbs.deleted));
+|| !hmapx_is_empty(_nd_changes->trk_lbs.deleted)
+|| !hmapx_is_empty(_nd_changes->ls_with_changed_lbs.crupdated)
+|| !hmapx_is_empty(_nd_changes->lr_with_changed_lbs.crupdated)
+);
 }
 
 bool
@@ -5188,6 +5197,8 @@ northd_has_only_ports_in_tracked_data(
 {
 return (hmapx_is_empty(_nd_changes->trk_lbs.crupdated)
 && hmapx_is_empty(_nd_changes->trk_lbs.deleted)
+&& hmapx_is_empty(_nd_changes->ls_with_changed_lbs.crupdated)
+&& hmapx_is_empty(_nd_changes->lr_with_changed_lbs.crupdated)
 && (!hmapx_is_empty(_nd_changes->trk_ovn_ports.created)
 || !hmapx_is_empty(_nd_changes->trk_ovn_ports.updated)
 || !hmapx_is_empty(_nd_changes->trk_ovn_ports.deleted)));
@@ -5828,6 +5839,9 @@ northd_handle_lb_data_changes(struct tracked_lb_data 
*trk_lb_data,
lb_dps->nb_ls_map) {
 od = ls_datapaths->array[index];
 init_lb_for_datapath(od);
+
+/* Add the ls datapath to the northd tracked data. */
+hmapx_add(_changes->ls_with_changed_lbs.crupdated, od);
 }
 
 hmap_remove(lb_datapaths_map, _dps->hmap_node);
@@ -5909,6 +5923,9 @@ northd_handle_lb_data_changes(struct tracked_lb_data 
*trk_lb_data,
 
 /* Re-evaluate 'od->has_lb_vip' */
 init_lb_for_datapath(od);
+
+/* Add the ls datapath to the northd tracked data. */
+hmapx_add(_changes->ls_with_changed_lbs.crupdated, od);
 }
 
 LIST_FOR_EACH (codlb, list_node, _lb_data->crupdated_lr_lbs) {
@@ -5954,6 +5971,9 @@ northd_handle_lb_data_changes(struct tracked_lb_data 
*trk_lb_data,
 
 /* Re-evaluate 'od->has_lb_vip' */
 init_lb_for_datapath(od);
+
+/* Add the lr datapath to the northd tracked data. */
+hmapx_add(_changes->lr_with_changed_lbs.crupdated, od);
 }
 
 HMAP_FOR_EACH (clb, hmap_node, _lb_data->crupdated_lbs) {
@@ -5968,6 +5988,9 @@ northd_handle_lb_data_changes(struct tracked_lb_data 
*trk_lb_data,
 od = ls_datapaths->array[index];
 /* Re-evaluate 'od->has_lb_vip' */
 init_lb_for_datapath(od);
+
+/* Add the ls datapath to the northd tracked data. */
+hmapx_add(_changes->ls_with_changed_lbs.crupdated, od);
 }
 
 BITMAP_FOR_EACH_1 (index, ods_size(lr_datapaths),
@@ -5991,6 +6014,9 @@ northd_handle_lb_data_changes(struct tracked_lb_data 
*trk_lb_data,
 add_neigh_ips_to_lrouter(od, lb->neigh_mode,
  >inserted_vips_v4,
  >inserted_vips_v6);
+
+