On Tue, Mar 18, 2025 at 4:05 AM Ales Musil <amu...@redhat.com> wrote: > > > > On Thu, Mar 13, 2025 at 5:28 PM <num...@ovn.org> wrote: >> >> From: Numan Siddique <num...@ovn.org> >> >> Make use of this function instead of calling lport_lookup_by_name() >> for the chassis-redirect-port name in various places. >> >> Suggested-by: Dumitru Ceara <dce...@redhat.com> >> Signed-off-by: Numan Siddique <num...@ovn.org> >> --- > > > HI Numan, > > thank you for the patch, I have one comment down below. > >> controller/local_data.c | 10 ++++------ >> controller/lport.c | 36 +++++++++++++++++++++++++++++------- >> controller/lport.h | 9 +++++++++ >> controller/pinctrl.c | 16 ++++++---------- >> controller/route.c | 18 ++++++++++-------- >> 5 files changed, 58 insertions(+), 31 deletions(-) >> >> diff --git a/controller/local_data.c b/controller/local_data.c >> index 4aee39d6b2..d464f69732 100644 >> --- a/controller/local_data.c >> +++ b/controller/local_data.c >> @@ -149,18 +149,16 @@ need_add_peer_to_local( >> } >> >> /* If it is a regular patch port, it is fully distributed, add the >> peer. */ >> - const char *crp = smap_get(&pb->options, "chassis-redirect-port"); >> - if (!crp) { >> + const char *crp_name = smap_get(&pb->options, "chassis-redirect-port"); >> + if (!crp_name) { >> return true; >> } >> >> /* A DGP, find its chassis-redirect-port pb. */ >> const struct sbrec_port_binding *pb_crp = >> - lport_lookup_by_name(sbrec_port_binding_by_name, crp); >> + lport_get_cr_port(sbrec_port_binding_by_name, pb, crp_name, true); >> + >> if (!pb_crp) { >> - static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); >> - VLOG_WARN_RL(&rl, "Chassis-redirect-port %s for DGP %s is not >> found.", >> - pb->logical_port, crp); > > > I think we should leave the warn here, it's the only place that uses this. > >> return false; >> } >> >> diff --git a/controller/lport.c b/controller/lport.c >> index 178fbb6a95..9b26d2825f 100644 >> --- a/controller/lport.c >> +++ b/controller/lport.c >> @@ -63,7 +63,7 @@ lport_lookup_by_key(struct ovsdb_idl_index >> *sbrec_datapath_binding_by_key, >> port_key); >> } >> >> -static bool >> +bool >> lport_pb_is_chassis_resident(const struct sbrec_chassis *chassis, >> const struct sset *active_tunnels, >> const struct sbrec_port_binding *pb) >> @@ -107,13 +107,10 @@ lport_is_local(struct ovsdb_idl_index >> *sbrec_port_binding_by_name, >> return true; >> } >> >> - const char *crp = smap_get(&pb->options, "chassis-redirect-port"); >> - if (!crp) { >> - return false; >> - } >> + const struct sbrec_port_binding *cr_pb = >> + lport_get_cr_port(sbrec_port_binding_by_name, pb, NULL, false); >> >> - return lport_is_chassis_resident(sbrec_port_binding_by_name, chassis, >> - active_tunnels, crp); >> + return lport_pb_is_chassis_resident(chassis, active_tunnels, cr_pb); >> } >> >> const struct sbrec_port_binding * >> @@ -136,6 +133,31 @@ lport_get_l3gw_peer(const struct sbrec_port_binding *pb, >> return get_peer_lport(pb, sbrec_port_binding_by_name); >> } >> >> +const struct sbrec_port_binding * >> +lport_get_cr_port(struct ovsdb_idl_index *sbrec_port_binding_by_name, >> + const struct sbrec_port_binding *pb, >> + const char *crp_name, bool warn) >> +{ >> + ovs_assert(pb); >> + >> + if (!crp_name) { >> + crp_name = smap_get(&pb->options, "chassis-redirect-port"); >> + if (!crp_name) { >> + return NULL; >> + } >> + } >> + >> + const struct sbrec_port_binding *cr_pb = >> + lport_lookup_by_name(sbrec_port_binding_by_name, crp_name); >> + if (warn && !cr_pb) { >> + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); >> + VLOG_WARN_RL(&rl, "chassis-redirect-port %s for DGP %s is not >> found.", >> + crp_name, pb->logical_port); >> + } >> + >> + return cr_pb; >> +} >> + >> enum can_bind >> lport_can_bind_on_this_chassis(const struct sbrec_chassis *chassis_rec, >> const struct sbrec_port_binding *pb) >> diff --git a/controller/lport.h b/controller/lport.h >> index c410454e4c..387eb21dd0 100644 >> --- a/controller/lport.h >> +++ b/controller/lport.h >> @@ -64,6 +64,11 @@ lport_is_chassis_resident(struct ovsdb_idl_index >> *sbrec_port_binding_by_name, >> const struct sbrec_chassis *chassis, >> const struct sset *active_tunnels, >> const char *port_name); >> +bool >> +lport_pb_is_chassis_resident(const struct sbrec_chassis *chassis, >> + const struct sset *active_tunnels, >> + const struct sbrec_port_binding *pb); >> + >> bool lport_is_local(struct ovsdb_idl_index *sbrec_port_binding_by_name, >> const struct sbrec_chassis *chassis, >> const struct sset *active_tunnels, >> @@ -74,6 +79,10 @@ const struct sbrec_port_binding *lport_get_peer( >> const struct sbrec_port_binding *lport_get_l3gw_peer( >> const struct sbrec_port_binding *, >> struct ovsdb_idl_index *sbrec_port_binding_by_name); >> +const struct sbrec_port_binding *lport_get_cr_port( >> + struct ovsdb_idl_index *sbrec_port_binding_by_name, >> + const struct sbrec_port_binding *, >> + const char *crp_name, bool warn); >> bool >> lport_is_activated_by_activation_strategy(const struct sbrec_port_binding >> *pb, >> const struct sbrec_chassis >> *chassis); >> diff --git a/controller/pinctrl.c b/controller/pinctrl.c >> index 429eceaee6..c73cb46e00 100644 >> --- a/controller/pinctrl.c >> +++ b/controller/pinctrl.c >> @@ -4926,21 +4926,17 @@ run_buffered_binding(const struct >> sbrec_mac_binding_table *mac_binding_table, >> >> mac_binding_add(&recent_mbs, mb_data, smb, 0); >> >> - const char *redirect_port = >> - smap_get(&pb->options, "chassis-redirect-port"); >> - if (!redirect_port) { >> - continue; >> - } >> - >> - pb = lport_lookup_by_name(sbrec_port_binding_by_name, >> redirect_port); >> - if (!pb || pb->datapath->tunnel_key != smb->datapath->tunnel_key || >> - strcmp(pb->type, "chassisredirect")) { >> + const struct sbrec_port_binding *cr_pb = >> + lport_get_cr_port(sbrec_port_binding_by_name, pb, NULL, false); >> + if (!cr_pb || >> + cr_pb->datapath->tunnel_key != smb->datapath->tunnel_key || >> + strcmp(cr_pb->type, "chassisredirect")) { >> continue; >> } >> >> /* Add the same entry also for chassisredirect port as the buffered >> * traffic might be buffered on the cr port. */ >> - mb_data.port_key = pb->tunnel_key; >> + mb_data.port_key = cr_pb->tunnel_key; >> mac_binding_add(&recent_mbs, mb_data, smb, 0); >> } >> >> diff --git a/controller/route.c b/controller/route.c >> index 57af1ed91f..7318136ec6 100644 >> --- a/controller/route.c >> +++ b/controller/route.c >> @@ -61,18 +61,20 @@ route_exchange_find_port(struct ovsdb_idl_index >> *sbrec_port_binding_by_name, >> if (route_exchange_relevant_port(pb)) { >> return pb; >> } >> - const char *crp = smap_get(&pb->options, "chassis-redirect-port"); >> - if (!crp) { >> + >> + const struct sbrec_port_binding *cr_pb = >> + lport_get_cr_port(sbrec_port_binding_by_name, pb, NULL, false); >> + >> + if (!cr_pb) { >> return NULL; >> } >> - if (!lport_is_chassis_resident(sbrec_port_binding_by_name, chassis, >> - active_tunnels, crp)) { >> + >> + if (!lport_pb_is_chassis_resident(chassis, active_tunnels, cr_pb)) { >> return NULL; >> } >> - const struct sbrec_port_binding *crpbp = lport_lookup_by_name( >> - sbrec_port_binding_by_name, crp); >> - if (route_exchange_relevant_port(crpbp)) { >> - return crpbp; >> + >> + if (route_exchange_relevant_port(cr_pb)) { >> + return cr_pb; >> } >> return NULL; >> } >> -- >> 2.48.1 >> >> _______________________________________________ >> dev mailing list >> d...@openvswitch.org >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev >> > > With that addressed: > Acked-by: Ales Musil <amu...@redhat.com>
Thanks Ales for the reviews. I addressed your comment and applied this patch series to main with the below changes. And also backported patch 2 to branch-25.03. --------------------------------------------------------------------------------------------- diff --git a/controller/local_data.c b/controller/local_data.c index d464f69732..5383f49cf8 100644 --- a/controller/local_data.c +++ b/controller/local_data.c @@ -156,9 +156,12 @@ need_add_peer_to_local( /* A DGP, find its chassis-redirect-port pb. */ const struct sbrec_port_binding *pb_crp = - lport_get_cr_port(sbrec_port_binding_by_name, pb, crp_name, true); + lport_get_cr_port(sbrec_port_binding_by_name, pb, crp_name); if (!pb_crp) { + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); + VLOG_WARN_RL(&rl, "chassis-redirect-port %s for DGP %s is not found.", + crp_name, pb->logical_port); return false; } diff --git a/controller/lport.c b/controller/lport.c index 9b26d2825f..d8ba7ca164 100644 --- a/controller/lport.c +++ b/controller/lport.c @@ -108,7 +108,7 @@ lport_is_local(struct ovsdb_idl_index *sbrec_port_binding_by_name, } const struct sbrec_port_binding *cr_pb = - lport_get_cr_port(sbrec_port_binding_by_name, pb, NULL, false); + lport_get_cr_port(sbrec_port_binding_by_name, pb, NULL); return lport_pb_is_chassis_resident(chassis, active_tunnels, cr_pb); } @@ -135,8 +135,7 @@ lport_get_l3gw_peer(const struct sbrec_port_binding *pb, const struct sbrec_port_binding * lport_get_cr_port(struct ovsdb_idl_index *sbrec_port_binding_by_name, - const struct sbrec_port_binding *pb, - const char *crp_name, bool warn) + const struct sbrec_port_binding *pb, const char *crp_name) { ovs_assert(pb); @@ -147,15 +146,7 @@ lport_get_cr_port(struct ovsdb_idl_index *sbrec_port_binding_by_name, } } - const struct sbrec_port_binding *cr_pb = - lport_lookup_by_name(sbrec_port_binding_by_name, crp_name); - if (warn && !cr_pb) { - static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); - VLOG_WARN_RL(&rl, "chassis-redirect-port %s for DGP %s is not found.", - crp_name, pb->logical_port); - } - - return cr_pb; + return lport_lookup_by_name(sbrec_port_binding_by_name, crp_name); } enum can_bind diff --git a/controller/lport.h b/controller/lport.h index 387eb21dd0..8463c96232 100644 --- a/controller/lport.h +++ b/controller/lport.h @@ -64,10 +64,9 @@ lport_is_chassis_resident(struct ovsdb_idl_index *sbrec_port_binding_by_name, const struct sbrec_chassis *chassis, const struct sset *active_tunnels, const char *port_name); -bool -lport_pb_is_chassis_resident(const struct sbrec_chassis *chassis, - const struct sset *active_tunnels, - const struct sbrec_port_binding *pb); +bool lport_pb_is_chassis_resident(const struct sbrec_chassis *chassis, + const struct sset *active_tunnels, + const struct sbrec_port_binding *pb); bool lport_is_local(struct ovsdb_idl_index *sbrec_port_binding_by_name, const struct sbrec_chassis *chassis, @@ -81,8 +80,7 @@ const struct sbrec_port_binding *lport_get_l3gw_peer( struct ovsdb_idl_index *sbrec_port_binding_by_name); const struct sbrec_port_binding *lport_get_cr_port( struct ovsdb_idl_index *sbrec_port_binding_by_name, - const struct sbrec_port_binding *, - const char *crp_name, bool warn); + const struct sbrec_port_binding *, const char *crp_name); bool lport_is_activated_by_activation_strategy(const struct sbrec_port_binding *pb, const struct sbrec_chassis *chassis); diff --git a/controller/pinctrl.c b/controller/pinctrl.c index c73cb46e00..1481b2547a 100644 --- a/controller/pinctrl.c +++ b/controller/pinctrl.c @@ -4927,7 +4927,7 @@ run_buffered_binding(const struct sbrec_mac_binding_table *mac_binding_table, mac_binding_add(&recent_mbs, mb_data, smb, 0); const struct sbrec_port_binding *cr_pb = - lport_get_cr_port(sbrec_port_binding_by_name, pb, NULL, false); + lport_get_cr_port(sbrec_port_binding_by_name, pb, NULL); if (!cr_pb || cr_pb->datapath->tunnel_key != smb->datapath->tunnel_key || strcmp(cr_pb->type, "chassisredirect")) { diff --git a/controller/route.c b/controller/route.c index 7318136ec6..a5862b9b9c 100644 --- a/controller/route.c +++ b/controller/route.c @@ -63,7 +63,7 @@ route_exchange_find_port(struct ovsdb_idl_index *sbrec_port_binding_by_name, } const struct sbrec_port_binding *cr_pb = - lport_get_cr_port(sbrec_port_binding_by_name, pb, NULL, false); + lport_get_cr_port(sbrec_port_binding_by_name, pb, NULL); if (!cr_pb) { return NULL; --------------------------------------------------------------------------------------------- Thanks Numan > > Thanks, > Ales _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev