Acked-by: Mark Michelson <mmich...@redhat.com>

On 4/3/25 22:45, num...@ovn.org wrote:
From: Numan Siddique <num...@ovn.org>

Expand the helper lport_get_peer() to get the peer for both
'patch' and 'l3gateway' port binding types and add a new
helper lport_get_patch_peer() for 'patch' type.

This cleans up the code a bit.

Signed-off-by: Numan Siddique <num...@ovn.org>
---
  controller/binding.c    |  2 +-
  controller/local_data.c | 44 ++++++++++++++---------------------------
  controller/lport.c      | 10 ++++++++++
  controller/lport.h      |  3 +++
  4 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/controller/binding.c b/controller/binding.c
index 470aa8c536..b657de9e44 100644
--- a/controller/binding.c
+++ b/controller/binding.c
@@ -2970,7 +2970,7 @@ consider_patch_port_for_local_datapaths(const struct 
sbrec_port_binding *pb,
           * */
          const struct sbrec_port_binding *peer;
          struct local_datapath *peer_ld = NULL;
-        peer = lport_get_peer(pb, b_ctx_in->sbrec_port_binding_by_name);
+        peer = lport_get_patch_peer(pb, b_ctx_in->sbrec_port_binding_by_name);
          if (peer) {
              peer_ld =
                  get_local_datapath(b_ctx_out->local_datapaths,
diff --git a/controller/local_data.c b/controller/local_data.c
index 5383f49cf8..d37ea1488b 100644
--- a/controller/local_data.c
+++ b/controller/local_data.c
@@ -208,12 +208,8 @@ add_local_datapath_peer_port(
      struct hmap *local_datapaths,
      struct hmap *tracked_datapaths)
  {
-    const struct sbrec_port_binding *peer;
-     if (!strcmp(pb->type, "l3gateway")) {
-        peer = lport_get_l3gw_peer(pb, sbrec_port_binding_by_name);
-    } else {
-        peer = lport_get_peer(pb, sbrec_port_binding_by_name);
-    }
+    const struct sbrec_port_binding *peer =
+        lport_get_peer(pb, sbrec_port_binding_by_name);
if (!peer) {
          return;
@@ -630,29 +626,19 @@ add_local_datapath__(struct ovsdb_idl_index 
*sbrec_datapath_binding_by_key,
      const struct sbrec_port_binding *pb;
      SBREC_PORT_BINDING_FOR_EACH_EQUAL (pb, target,
                                         sbrec_port_binding_by_datapath) {
-        if (!strcmp(pb->type, "patch") || !strcmp(pb->type, "l3gateway")) {
-            const char *peer_name = smap_get(&pb->options, "peer");
-            if (peer_name) {
-                const struct sbrec_port_binding *peer;
-
-                peer = lport_lookup_by_name(sbrec_port_binding_by_name,
-                                            peer_name);
-
-                if (peer && peer->datapath) {
-                    if (need_add_peer_to_local(
-                            sbrec_port_binding_by_name, pb, chassis)) {
-                        struct local_datapath *peer_ld =
-                            add_local_datapath__(sbrec_datapath_binding_by_key,
-                                             sbrec_port_binding_by_datapath,
-                                             sbrec_port_binding_by_name,
-                                             depth + 1, peer->datapath,
-                                             chassis, local_datapaths,
-                                             tracked_datapaths);
-                        local_datapath_peer_port_add(peer_ld, peer, pb);
-                        local_datapath_peer_port_add(ld, pb, peer);
-                    }
-                }
-            }
+        const struct sbrec_port_binding *peer =
+            lport_get_peer(pb, sbrec_port_binding_by_name);
+        if (peer && need_add_peer_to_local(sbrec_port_binding_by_name,
+                                           pb, chassis)) {
+            struct local_datapath *peer_ld =
+                add_local_datapath__(sbrec_datapath_binding_by_key,
+                                    sbrec_port_binding_by_datapath,
+                                    sbrec_port_binding_by_name,
+                                    depth + 1, peer->datapath,
+                                    chassis, local_datapaths,
+                                    tracked_datapaths);
+            local_datapath_peer_port_add(peer_ld, peer, pb);
+            local_datapath_peer_port_add(ld, pb, peer);
          }
      }
      sbrec_port_binding_index_destroy_row(target);
diff --git a/controller/lport.c b/controller/lport.c
index d8ba7ca164..92de375b5e 100644
--- a/controller/lport.c
+++ b/controller/lport.c
@@ -116,6 +116,16 @@ lport_is_local(struct ovsdb_idl_index 
*sbrec_port_binding_by_name,
  const struct sbrec_port_binding *
  lport_get_peer(const struct sbrec_port_binding *pb,
                 struct ovsdb_idl_index *sbrec_port_binding_by_name)
+{
+    const struct sbrec_port_binding *peer =
+        lport_get_patch_peer(pb, sbrec_port_binding_by_name);
+
+    return peer ? peer : lport_get_l3gw_peer(pb, sbrec_port_binding_by_name);
+}
+
+const struct sbrec_port_binding *
+lport_get_patch_peer(const struct sbrec_port_binding *pb,
+               struct ovsdb_idl_index *sbrec_port_binding_by_name)
  {
      if (strcmp(pb->type, "patch")) {
          return NULL;
diff --git a/controller/lport.h b/controller/lport.h
index 8463c96232..8b1809a275 100644
--- a/controller/lport.h
+++ b/controller/lport.h
@@ -75,6 +75,9 @@ bool lport_is_local(struct ovsdb_idl_index 
*sbrec_port_binding_by_name,
  const struct sbrec_port_binding *lport_get_peer(
      const struct sbrec_port_binding *,
      struct ovsdb_idl_index *sbrec_port_binding_by_name);
+const struct sbrec_port_binding *lport_get_patch_peer(
+    const struct sbrec_port_binding *,
+    struct ovsdb_idl_index *sbrec_port_binding_by_name);
  const struct sbrec_port_binding *lport_get_l3gw_peer(
      const struct sbrec_port_binding *,
      struct ovsdb_idl_index *sbrec_port_binding_by_name);

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

Reply via email to