On 1/11/24 16:33, num...@ovn.org wrote: > From: Numan Siddique <num...@ovn.org> > > Signed-off-by: Numan Siddique <num...@ovn.org> > ---
Hi Numan, [...] > @@ -16647,6 +16605,86 @@ lflow_handle_northd_lb_changes(struct ovsdb_idl_txn > *ovnsb_txn, > return true; > } > > +bool > +lflow_handle_lr_stateful_changes(struct ovsdb_idl_txn *ovnsb_txn, > + struct lr_stateful_tracked_data *trk_data, > + struct lflow_input *lflow_input, > + struct lflow_table *lflows) > +{ > + struct lr_stateful_record *lr_stateful_rec; > + struct hmapx_node *hmapx_node; > + > + HMAPX_FOR_EACH (hmapx_node, &trk_data->crupdated) { > + lr_stateful_rec = hmapx_node->data; > + /* Unlink old lflows. */ > + lflow_ref_unlink_lflows(lr_stateful_rec->lflow_ref); > + > + /* Generate new lflows. */ > + struct ds match = DS_EMPTY_INITIALIZER; > + struct ds actions = DS_EMPTY_INITIALIZER; > + > + build_lr_stateful_flows(lr_stateful_rec, lflows, > lflow_input->ls_ports, > + lflow_input->lr_ports, &match, &actions, > + lflow_input->meter_groups, > + lflow_input->features); > + > + /* Sync the new flows to SB. */ > + bool handled = lflow_ref_sync_lflows( > + lr_stateful_rec->lflow_ref, lflows, ovnsb_txn, > + lflow_input->ls_datapaths, lflow_input->lr_datapaths, > + lflow_input->ovn_internal_version_changed, > + lflow_input->sbrec_logical_flow_table, > + lflow_input->sbrec_logical_dp_group_table); > + if (!handled) { We leak match and actions here. > + return false; > + } > + > + struct ovn_port *op; > + HMAP_FOR_EACH (op, dp_node, &lr_stateful_rec->od->ports) { > + lflow_ref_unlink_lflows(op->stateful_lflow_ref); > + > + build_lbnat_lflows_iterate_by_lrp(op, > + lflow_input->lr_stateful_table, > + lflow_input->meter_groups, > + &match, &actions, > + lflows); > + > + handled = lflow_ref_sync_lflows( > + op->stateful_lflow_ref, lflows, ovnsb_txn, > + lflow_input->ls_datapaths, lflow_input->lr_datapaths, > + lflow_input->ovn_internal_version_changed, > + lflow_input->sbrec_logical_flow_table, > + lflow_input->sbrec_logical_dp_group_table); > + if (!handled) { We leak match and actions here. > + return false; > + } > + > + if (op->peer && op->peer->nbsp) { > + lflow_ref_unlink_lflows(op->peer->stateful_lflow_ref); > + > + build_lbnat_lflows_iterate_by_lsp( > + op->peer, lflow_input->lr_stateful_table, &match, > &actions, > + lflows); > + > + handled = lflow_ref_sync_lflows( > + op->peer->stateful_lflow_ref, lflows, ovnsb_txn, > + lflow_input->ls_datapaths, lflow_input->lr_datapaths, > + lflow_input->ovn_internal_version_changed, > + lflow_input->sbrec_logical_flow_table, > + lflow_input->sbrec_logical_dp_group_table); > + if (!handled) { We leak match and actions here. > + return false; > + } > + } > + } > + > + ds_destroy(&match); > + ds_destroy(&actions); > + } > + > + return true; > +} > + > static bool > mirror_needs_update(const struct nbrec_mirror *nb_mirror, > const struct sbrec_mirror *sb_mirror) Regards, Dumitru _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev