On Mon, Aug 11, 2025 at 10:22 AM Numan Siddique <num...@ovn.org> wrote: > > On Mon, Aug 11, 2025 at 10:00 PM Han Zhou <hz...@ovn.org> wrote: > > > > On Mon, Aug 11, 2025 at 7:59 AM Mark Michelson via dev < > > ovs-dev@openvswitch.org> wrote: > > > > > > Prior to this commit, if you wanted to find the corresponding northbound > > > UUID for a southbound Logical Datapath, you could find it in one of two > > > places: > > > > > > For logical switches, it was in external-ids:logical-switch. > > > For logical routers, it was in external-ids:logical-router. > > > > > > With this commit, we are separating the type and UUID into separate > > > fields. This way, no matter the type of the datapath, you can find the > > > UUID. And you can find the type of the datapath without having to > > > potentially check multiple external-ids keys to do so. > > > > > > These fields are going to be used pretty heavily by northd in upcoming > > > patches, so instead of making them external-ids, these are now > > > full-fledged columns on the southbound Datapath_Binding. The UUID of the > > > northbound logical datapath is in a column called "nb_uuid" and the type > > > of the logical datapath is stored in an enumerated column called "type". > > > > Thanks Mark. Sorry for reviewing this late. While still reviewing the rest > > of the patches, I want to raise a question regarding this patch. Would it > > be more straightforward and efficient to use NB UUIDs directly in SB for > > both LS and LR? I saw that there was an old patch from Ales which mentioned > > this potential change [0]. It mentioned the necessity of "collision > > detection", but I don't think it is necessary, because UUIDs are just > > designed to be globally unique. Did I miss any other discussions for this? > > > > [0] https://www.mail-archive.com/ovs-dev%40openvswitch.org/msg89347.html > > > > I had included this change of using the same NB UUIDs in SB for > Datapath-bindings here [1] > as part of this series - [2]. Please see the comments in [1]. > > Later Lorenzo took over this patch series and dropped the patch [1] from it. > > [1] - https://patchwork.ozlabs.org/project/ovn/patch/20250110162652.3550775-1-num...@ovn.org/ > [2] - https://patchwork.ozlabs.org/project/ovn/list/?series=439760&state=* > > The main concern is that both LS and LR can have the same uuid. > IMO this can happen only if LS and LR were created by passing > "--id=<SAME_UUID>". > Using the same explicit UUID for LS and LR creation is clearly a misconfiguration.
> I personally think we can overlook this corner case and document it > and suggest the users to recreate such logical switches/routers before > upgrading. I agree, and I assume legitimate deployments would not have such conflicts. > > Thanks > Numan > > > Thanks, > > Han > > > > > > > > Note that there is a seemingly-unrelated change in the check packet > > > length test in tests/ovn.at. This test started failing because its use > > > of `grep` was picking up the new "nb_uuid" column accidentally. The > > > change to the test uses `fetch_column` since it is more precise. > > > > > > Signed-off-by: Mark Michelson <mmich...@redhat.com> > > > Acked-by: Ales Musil <amu...@redhat.com> > > > --- > > > v14 > > > * Rebased. > > > > > > v13 > > > * Rebased. > > > > > > v12 > > > * Rebased. > > > * Added Ales Musil's ack. > > > > > > v11 > > > * Rebased. > > > > > > v10 > > > * Rebased. > > > * Maintained backwards-compatibility with external_ids method of > > > storing NB UUID and type. It was recommended to continue setting > > > the external-ids in addition to the new fields. This patch does not > > > do that because that code would get immediately wiped out by the > > > next patch in the series. The next patch in the series does write > > > the old external_ids values, though. > > > > > > v9 > > > * Rebased. > > > > > > v8 > > > * Rebased. > > > * Changed the types of the new columns. The nb_uuid is type "uuid" and > > > the type is an enum. > > > > > > v7 > > > * Rebased. > > > * Changed from using external-ids for the nb_uuid and type to using > > > new columns in the Datapath_Binding table. > > > > > > v6 > > > * This is the first version of the series to contain this patch. > > > --- > > > controller/local_data.c | 2 +- > > > ic/ovn-ic.c | 5 +++-- > > > lib/ovn-util.c | 45 +++++++++++++++++++++++++++++++++++++++++ > > > lib/ovn-util.h | 8 ++++++++ > > > northd/northd.c | 38 +++++++++++++++++----------------- > > > northd/northd.h | 5 +++-- > > > ovn-sb.ovsschema | 11 ++++++++-- > > > ovn-sb.xml | 21 ++++++++++--------- > > > tests/ovn-controller.at | 4 ++++ > > > tests/ovn-northd.at | 6 +++--- > > > tests/ovn.at | 6 ++---- > > > utilities/ovn-sbctl.c | 4 ++-- > > > utilities/ovn-trace.c | 3 +-- > > > 13 files changed, 112 insertions(+), 46 deletions(-) > > > > > > diff --git a/controller/local_data.c b/controller/local_data.c > > > index 00383d091..a35d3fa5a 100644 > > > --- a/controller/local_data.c > > > +++ b/controller/local_data.c > > > @@ -708,7 +708,7 @@ local_datapath_peer_port_add(struct local_datapath > > *ld, > > > static bool > > > datapath_is_switch(const struct sbrec_datapath_binding *ldp) > > > { > > > - return smap_get(&ldp->external_ids, "logical-switch") != NULL; > > > + return strcmp(datapath_get_nb_type(ldp), "logical-switch") == 0; > > > } > > > > > > static bool > > > diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c > > > index caffa6fe0..0cd78e720 100644 > > > --- a/ic/ovn-ic.c > > > +++ b/ic/ovn-ic.c > > > @@ -613,8 +613,7 @@ get_router_uuid_by_sb_pb(struct ic_context *ctx, > > > return NULL; > > > } > > > > > > - return smap_get_uuid(&router_pb->datapath->external_ids, > > "logical-router", > > > - router_uuid); > > > + return datapath_get_nb_uuid(router_pb->datapath, router_uuid); > > > } > > > > > > static void > > > @@ -2582,6 +2581,8 @@ main(int argc, char *argv[]) > > > ovsdb_idl_add_table(ovnsb_idl_loop.idl, > > &sbrec_table_datapath_binding); > > > ovsdb_idl_add_column(ovnsb_idl_loop.idl, > > > &sbrec_datapath_binding_col_external_ids); > > > + ovsdb_idl_add_column(ovnsb_idl_loop.idl, > > > + &sbrec_datapath_binding_col_nb_uuid); > > > > > > ovsdb_idl_add_table(ovnsb_idl_loop.idl, &sbrec_table_port_binding); > > > ovsdb_idl_add_column(ovnsb_idl_loop.idl, > > > diff --git a/lib/ovn-util.c b/lib/ovn-util.c > > > index ab5c4fc47..44a1082d4 100644 > > > --- a/lib/ovn-util.c > > > +++ b/lib/ovn-util.c > > > @@ -1503,3 +1503,48 @@ put_load(uint64_t value, enum mf_field_id dst, > > size_t ofs, size_t n_bits, > > > ovs_be64 n_value = htonll(value); > > > put_load_bytes(&n_value, 8, dst, ofs, n_bits, ofpacts); > > > } > > > + > > > +bool > > > +datapath_get_nb_uuid_and_type(const struct sbrec_datapath_binding *sb, > > > + struct uuid *nb_uuid, const char **type) > > > +{ > > > + if (sb->nb_uuid) { > > > + /* New style. The UUID and type are direct columns, so use > > those. */ > > > + *nb_uuid = *sb->nb_uuid; > > > + *type = sb->type; > > > + return true; > > > + } > > > + > > > + /* Old style. The UUID is stored in external_ids, and the key > > > + * corresponds to the datapath type. This only works with > > > + * logical switches and logical routers. > > > + */ > > > + *type = "logical-switch"; > > > + if (smap_get_uuid(&sb->external_ids, *type, nb_uuid)) { > > > + return true; > > > + } > > > + *type = "logical-router"; > > > + if (smap_get_uuid(&sb->external_ids, *type, nb_uuid)) { > > > + return true; > > > + } > > > + *type = ""; > > > + *nb_uuid = UUID_ZERO; > > > + return false; > > > +} > > > + > > > +bool > > > +datapath_get_nb_uuid(const struct sbrec_datapath_binding *sb, > > > + struct uuid *nb_uuid) > > > +{ > > > + const char *type; > > > + return datapath_get_nb_uuid_and_type(sb, nb_uuid, &type); > > > +} > > > + > > > +const char * > > > +datapath_get_nb_type(const struct sbrec_datapath_binding *sb) > > > +{ > > > + const char *type; > > > + struct uuid nb_uuid; > > > + datapath_get_nb_uuid_and_type(sb, &nb_uuid, &type); > > > + return type; > > > +} > > > diff --git a/lib/ovn-util.h b/lib/ovn-util.h > > > index bde40666a..18ebea912 100644 > > > --- a/lib/ovn-util.h > > > +++ b/lib/ovn-util.h > > > @@ -546,4 +546,12 @@ void put_load(uint64_t value, enum mf_field_id dst, > > size_t ofs, size_t n_bits, > > > #define _VFUNC(name, n) _VFUNC_(name, n) > > > #define VFUNC(func, ...) _VFUNC(func, __NARG__(__VA_ARGS__)) > > (__VA_ARGS__) > > > > > > +bool datapath_get_nb_uuid_and_type(const struct sbrec_datapath_binding > > *sb, > > > + struct uuid *nb_uuid, const char > > **type); > > > + > > > +bool datapath_get_nb_uuid(const struct sbrec_datapath_binding *sb, > > > + struct uuid *nb_uuid); > > > + > > > +const char *datapath_get_nb_type(const struct sbrec_datapath_binding > > *sb); > > > + > > > #endif /* OVN_UTIL_H */ > > > diff --git a/northd/northd.c b/northd/northd.c > > > index 2cb69f9aa..241af1d3c 100644 > > > --- a/northd/northd.c > > > +++ b/northd/northd.c > > > @@ -608,19 +608,21 @@ ovn_datapath_from_sbrec(const struct hmap > > *ls_datapaths, > > > const struct hmap *lr_datapaths, > > > const struct sbrec_datapath_binding *sb) > > > { > > > - struct uuid key; > > > const struct hmap *dps; > > > + struct uuid key; > > > + const char *type; > > > + if (!datapath_get_nb_uuid_and_type(sb, &key, &type)) { > > > + return NULL; > > > + } > > > > > > - if (smap_get_uuid(&sb->external_ids, "logical-switch", &key)) { > > > + if (!strcmp(type, "logical-switch")) { > > > dps = ls_datapaths; > > > - } else if (smap_get_uuid(&sb->external_ids, "logical-router", &key)) > > { > > > + } else if (!strcmp(type, "logical-router")) { > > > dps = lr_datapaths; > > > } else { > > > return NULL; > > > } > > > - if (!dps) { > > > - return NULL; > > > - } > > > + > > > struct ovn_datapath *od = ovn_datapath_find_(dps, &key); > > > if (od && (od->sb == sb)) { > > > return od; > > > @@ -768,11 +770,9 @@ store_mcast_info_for_switch_datapath(const struct > > sbrec_ip_multicast *sb, > > > static void > > > ovn_datapath_update_external_ids(struct ovn_datapath *od) > > > { > > > - /* Get the logical-switch or logical-router UUID to set in > > > - * external-ids. */ > > > + /* Get the NB UUID to set in external-ids. */ > > > char uuid_s[UUID_LEN + 1]; > > > sprintf(uuid_s, UUID_FMT, UUID_ARGS(&od->key)); > > > - const char *key = od->nbs ? "logical-switch" : "logical-router"; > > > > > > /* Get names to set in external-ids. */ > > > const char *name = od->nbs ? od->nbs->name : od->nbr->name; > > > @@ -784,7 +784,6 @@ ovn_datapath_update_external_ids(struct ovn_datapath > > *od) > > > > > > /* Set external-ids. */ > > > struct smap ids = SMAP_INITIALIZER(&ids); > > > - smap_add(&ids, key, uuid_s); > > > smap_add(&ids, "name", name); > > > if (name2 && name2[0]) { > > > smap_add(&ids, "name2", name2); > > > @@ -912,13 +911,10 @@ join_datapaths(const struct > > nbrec_logical_switch_table *nbrec_ls_table, > > > const struct sbrec_datapath_binding *sb; > > > SBREC_DATAPATH_BINDING_TABLE_FOR_EACH_SAFE (sb, sbrec_dp_table) { > > > struct uuid key; > > > - if (!smap_get_uuid(&sb->external_ids, "logical-switch", &key) && > > > - !smap_get_uuid(&sb->external_ids, "logical-router", &key)) { > > > + if (!datapath_get_nb_uuid(sb, &key)) { > > > ovsdb_idl_txn_add_comment( > > > ovnsb_txn, > > > - "deleting Datapath_Binding "UUID_FMT" that lacks " > > > - "external-ids:logical-switch and " > > > - "external-ids:logical-router", > > > + "deleting Datapath_Binding "UUID_FMT" that lacks > > nb_uuid", > > > UUID_ARGS(&sb->header_.uuid)); > > > sbrec_datapath_binding_delete(sb); > > > continue; > > > @@ -928,13 +924,13 @@ join_datapaths(const struct > > nbrec_logical_switch_table *nbrec_ls_table, > > > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, > > 1); > > > VLOG_INFO_RL( > > > &rl, "deleting Datapath_Binding "UUID_FMT" with " > > > - "duplicate external-ids:logical-switch/router "UUID_FMT, > > > - UUID_ARGS(&sb->header_.uuid), UUID_ARGS(&key)); > > > + "duplicate nb_uuid "UUID_FMT, > > > + UUID_ARGS(&sb->header_.uuid), UUID_ARGS(sb->nb_uuid)); > > > sbrec_datapath_binding_delete(sb); > > > continue; > > > } > > > > > > - struct ovn_datapath *od = ovn_datapath_create(datapaths, &key, > > > + struct ovn_datapath *od = ovn_datapath_create(datapaths, > > sb->nb_uuid, > > > NULL, NULL, sb); > > > ovs_list_push_back(sb_only, &od->list); > > > } > > > @@ -1140,11 +1136,17 @@ build_datapaths(struct ovsdb_idl_txn *ovnsb_txn, > > > sbrec_datapath_binding_set_tunnel_key(od->sb, > > od->tunnel_key); > > > } > > > ovn_datapath_update_external_ids(od); > > > + sbrec_datapath_binding_set_nb_uuid(od->sb, &od->key, 1); > > > + sbrec_datapath_binding_set_type(od->sb, od->nbs ? > > "logical-switch" : > > > + "logical-router"); > > > } > > > LIST_FOR_EACH (od, list, &nb_only) { > > > od->sb = sbrec_datapath_binding_insert(ovnsb_txn); > > > ovn_datapath_update_external_ids(od); > > > sbrec_datapath_binding_set_tunnel_key(od->sb, od->tunnel_key); > > > + sbrec_datapath_binding_set_nb_uuid(od->sb, &od->key, 1); > > > + sbrec_datapath_binding_set_type(od->sb, od->nbs ? > > "logical-switch" : > > > + "logical-router"); > > > } > > > ovn_destroy_tnlids(&dp_tnlids); > > > > > > diff --git a/northd/northd.h b/northd/northd.h > > > index 1108793d7..d3b268129 100644 > > > --- a/northd/northd.h > > > +++ b/northd/northd.h > > > @@ -351,7 +351,7 @@ DRR_MODES > > > #undef DRR_MODE > > > > > > /* The 'key' comes from nbs->header_.uuid or nbr->header_.uuid or > > > - * sb->external_ids:logical-switch. */ > > > + * sb->nb_uuid. */ > > > struct ovn_datapath { > > > struct hmap_node key_node; /* Index on 'key'. */ > > > struct uuid key; /* (nbs/nbr)->header_.uuid. */ > > > @@ -454,7 +454,8 @@ ovn_datapath_is_stale(const struct ovn_datapath *od) > > > /* The two purposes for which ovn-northd uses OVN logical datapaths. */ > > > enum ovn_datapath_type { > > > DP_SWITCH, /* OVN logical switch. */ > > > - DP_ROUTER /* OVN logical router. */ > > > + DP_ROUTER, /* OVN logical router. */ > > > + DP_MAX, > > > }; > > > > > > /* Returns an "enum ovn_stage" built from the arguments. > > > diff --git a/ovn-sb.ovsschema b/ovn-sb.ovsschema > > > index 4c24f5b51..8bc7bbba3 100644 > > > --- a/ovn-sb.ovsschema > > > +++ b/ovn-sb.ovsschema > > > @@ -1,7 +1,7 @@ > > > { > > > "name": "OVN_Southbound", > > > - "version": "21.2.0", > > > - "cksum": "29145795 34859", > > > + "version": "21.3.0", > > > + "cksum": "3179330761 35286", > > > "tables": { > > > "SB_Global": { > > > "columns": { > > > @@ -196,6 +196,13 @@ > > > "load_balancers": {"type": {"key": {"type": "uuid"}, > > > "min": 0, > > > "max": "unlimited"}}, > > > + "type": {"type": {"key": {"type": "string", > > > + "enum": ["set", > > > + ["logical-switch", > > > + > > "logical-router"]]}}}, > > > + "nb_uuid": {"type": {"key": {"type": "uuid"}, > > > + "min": 0, > > > + "max": 1}}, > > > "external_ids": { > > > "type": {"key": "string", "value": "string", > > > "min": 0, "max": "unlimited"}}}, > > > diff --git a/ovn-sb.xml b/ovn-sb.xml > > > index 395deae83..dcade18fc 100644 > > > --- a/ovn-sb.xml > > > +++ b/ovn-sb.xml > > > @@ -3236,18 +3236,19 @@ tcp.flags = RST; > > > db="OVN_Northbound"/> database. > > > </p> > > > > > > - <column name="external_ids" key="logical-switch" type='{"type": > > "uuid"}'> > > > - For a logical datapath that represents a logical switch, > > > - <code>ovn-northd</code> stores in this key the UUID of the > > > - corresponding <ref table="Logical_Switch" db="OVN_Northbound"/> > > row in > > > - the <ref db="OVN_Northbound"/> database. > > > + <column name="type" type='{"type": "string"}'> > > > + This represents the type of the northbound logical datapath that > > is > > > + represented by this southbound <code>Datapath_Binding</code>. The > > > + possible values for this are: > > > + <ul> > > > + <li><code>logical-switch</code></li> > > > + <li><code>logical-router</code></li> > > > + </ul> > > > </column> > > > > > > - <column name="external_ids" key="logical-router" type='{"type": > > "uuid"}'> > > > - For a logical datapath that represents a logical router, > > > - <code>ovn-northd</code> stores in this key the UUID of the > > > - corresponding <ref table="Logical_Router" db="OVN_Northbound"/> > > row in > > > - the <ref db="OVN_Northbound"/> database. > > > + <column name="nb_uuid" type='{"type": "string"}'> > > > + This is the UUID of the corresponding northbound logical datapath > > > + represented by this southbound <code>Datapath_Binding</code>. > > > </column> > > > > > > <column name="external_ids" key="interconn-ts" type='{"type": > > "string"}'> > > > diff --git a/tests/ovn-controller.at b/tests/ovn-controller.at > > > index afdc76a32..95fbcc0be 100644 > > > --- a/tests/ovn-controller.at > > > +++ b/tests/ovn-controller.at > > > @@ -123,6 +123,7 @@ check_patches > > > # another logical port bound to this chassis. > > > check_uuid ovn-sbctl \ > > > -- --id=@dp101 create Datapath_Binding tunnel_key=101 > > external_ids:name=dp101 \ > > > + type=logical-switch \ > > > -- create Port_Binding datapath=@dp101 logical_port=localnet1 > > tunnel_key=1 \ > > > type=localnet options:network_name=physnet1 > > > check_patches > > > @@ -131,6 +132,7 @@ check_patches > > > # Now we should get some patch ports created. > > > check_uuid ovn-sbctl \ > > > -- --id=@dp102 create Datapath_Binding tunnel_key=102 > > external_ids:name=dp102 \ > > > + type=logical-switch \ > > > -- create Port_Binding datapath=@dp102 logical_port=localnet2 > > tunnel_key=1 \ > > > type=localnet options:network_name=physnet1 \ > > > -- create Port_Binding datapath=@dp102 logical_port=localvif2 > > tunnel_key=2 > > > @@ -145,7 +147,9 @@ check_patches \ > > > # the set of OVS patch ports doesn't change. > > > AT_CHECK([ovn-sbctl \ > > > -- --id=@dp1 create Datapath_Binding tunnel_key=1 > > external_ids:name=dp1 \ > > > + type=logical-switch \ > > > -- --id=@dp2 create Datapath_Binding tunnel_key=2 > > external_ids:name=dp2 \ > > > + type=logical-switch \ > > > -- create Port_Binding datapath=@dp1 logical_port=foo tunnel_key=1 > > type=patch options:peer=bar \ > > > -- create Port_Binding datapath=@dp2 logical_port=bar tunnel_key=2 > > type=patch options:peer=foo \ > > > -- create Port_Binding datapath=@dp1 logical_port=dp1vif > > tunnel_key=3 \ > > > diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at > > > index ec7009b28..6bfd09483 100644 > > > --- a/tests/ovn-northd.at > > > +++ b/tests/ovn-northd.at > > > @@ -1893,8 +1893,8 @@ check ovn-nbctl --wait=sb \ > > > > > > check_row_count Datapath_Binding 1 > > > > > > -nb_uuid=$(ovn-sbctl get Datapath_Binding . external_ids:logical-router) > > > -lr_uuid=\"$(ovn-nbctl get Logical_Router . _uuid)\" > > > +nb_uuid=$(ovn-sbctl get Datapath_Binding . nb_uuid) > > > +lr_uuid=$(ovn-nbctl get Logical_Router . _uuid) > > > echo nb_uuid="$nb_uuid" lr_uuid="$lr_uuid" > > > AT_CHECK([test "${nb_uuid}" = "${lr_uuid}"]) > > > > > > @@ -7595,7 +7595,7 @@ ls1_uuid=$(fetch_column nb:Logical_Switch _uuid) > > > > > > # create a duplicated sb datapath (and an IP_Mulicast record that > > references > > > # it) on purpose. > > > -AT_CHECK([ovn-sbctl --id=@dp create Datapath_Binding > > external_ids:logical-switch=$ls1_uuid external_ids:name=ls1 tunnel_key=123 > > -- create IP_Multicast datapath=@dp], [0], [ignore]) > > > +AT_CHECK([ovn-sbctl --id=@dp create Datapath_Binding nb_uuid=$ls1_uuid > > type=logical-switch external_ids:name=ls1 tunnel_key=123 -- create > > IP_Multicast datapath=@dp], [0], [ignore]) > > > > > > # northd should delete one of the datapaths in the end > > > wait_row_count Datapath_Binding 1 > > > diff --git a/tests/ovn.at b/tests/ovn.at > > > index fadc62a76..bba57d9b4 100644 > > > --- a/tests/ovn.at > > > +++ b/tests/ovn.at > > > @@ -22232,8 +22232,7 @@ AT_CAPTURE_FILE([sbflows]) > > > AT_CHECK([as hv1 ovs-ofctl dump-flows br-int \ > > > | grep "check_pkt_larger" | wc -l], [0], [[0 > > > ]]) > > > -dp_uuid=$(ovn-sbctl find datapath_binding | grep lr0 -B2 | grep _uuid | \ > > > -awk '{print $3}') > > > +dp_uuid=$(fetch_column Datapath_Binding _uuid external-ids:name=lr0) > > > check_uuid ovn-sbctl create MAC_Binding ip=172.168.0.3 datapath=$dp_uuid > > \ > > > logical_port=lr0-public mac="00\:00\:00\:12\:af\:11" > > > > > > @@ -22303,8 +22302,7 @@ check ovn-nbctl lr-nat-add lr1 snat 172.168.0.100 > > 10.0.0.0/24 > > > check ovn-nbctl lr-nat-add lr1 snat 2000::1 1000::/64 > > > check ovn-nbctl --wait=sb sync > > > > > > -dp_uuid=$(ovn-sbctl find datapath_binding | grep lr1 -B2 | grep _uuid | \ > > > -awk '{print $3}') > > > +dp_uuid=$(fetch_column Datapath_Binding _uuid external-ids:name=lr1) > > > check_uuid ovn-sbctl create MAC_Binding ip=172.168.0.3 datapath=$dp_uuid > > \ > > > logical_port=lr1-public mac="00\:00\:00\:12\:af\:11" > > > > > > diff --git a/utilities/ovn-sbctl.c b/utilities/ovn-sbctl.c > > > index 60cc39149..74f759699 100644 > > > --- a/utilities/ovn-sbctl.c > > > +++ b/utilities/ovn-sbctl.c > > > @@ -382,6 +382,7 @@ pre_get_info(struct ctl_context *ctx) > > > ovsdb_idl_add_column(ctx->idl, > > &sbrec_logical_dp_group_col_datapaths); > > > > > > ovsdb_idl_add_column(ctx->idl, > > &sbrec_datapath_binding_col_external_ids); > > > + ovsdb_idl_add_column(ctx->idl, &sbrec_datapath_binding_col_nb_uuid); > > > > > > ovsdb_idl_add_column(ctx->idl, &sbrec_ip_multicast_col_datapath); > > > ovsdb_idl_add_column(ctx->idl, &sbrec_ip_multicast_col_seq_no); > > > @@ -1493,8 +1494,7 @@ static const struct ctl_table_class > > tables[SBREC_N_TABLES] = { > > > [SBREC_TABLE_DATAPATH_BINDING].row_ids > > > = {{&sbrec_datapath_binding_col_external_ids, "name", NULL}, > > > {&sbrec_datapath_binding_col_external_ids, "name2", NULL}, > > > - {&sbrec_datapath_binding_col_external_ids, "logical-switch", > > NULL}, > > > - {&sbrec_datapath_binding_col_external_ids, "logical-router", > > NULL}}, > > > + {&sbrec_datapath_binding_col_nb_uuid, NULL, NULL}}, > > > > > > [SBREC_TABLE_PORT_BINDING].row_ids > > > = {{&sbrec_port_binding_col_logical_port, NULL, NULL}, > > > diff --git a/utilities/ovn-trace.c b/utilities/ovn-trace.c > > > index a63a3be19..9ce29f096 100644 > > > --- a/utilities/ovn-trace.c > > > +++ b/utilities/ovn-trace.c > > > @@ -703,8 +703,7 @@ read_datapaths(void) > > > const struct smap *ids = &sbdb->external_ids; > > > > > > dp->sb_uuid = sbdb->header_.uuid; > > > - if (!smap_get_uuid(ids, "logical-switch", &dp->nb_uuid) && > > > - !smap_get_uuid(ids, "logical-router", &dp->nb_uuid)) { > > > + if (!datapath_get_nb_uuid(sbdb, &dp->nb_uuid)) { > > > dp->nb_uuid = dp->sb_uuid; > > > } > > > > > > -- > > > 2.49.0 > > > > > > _______________________________________________ > > > dev mailing list > > > d...@openvswitch.org > > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > _______________________________________________ > > dev mailing list > > d...@openvswitch.org > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev