From patchwork Sun Apr 30 23:22:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Pfaff X-Patchwork-Id: 756970 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3wGP7457ZZz9sCX for ; Mon, 1 May 2017 09:35:28 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 2943AC03; Sun, 30 Apr 2017 23:23:54 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 65EC6BFD for ; Sun, 30 Apr 2017 23:23:52 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id CCBC7188 for ; Sun, 30 Apr 2017 23:23:51 +0000 (UTC) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by relay8-d.mail.gandi.net (Postfix) with ESMTPS id BDC66406BF; Mon, 1 May 2017 01:23:50 +0200 (CEST) Received: from mfilter14-d.gandi.net (mfilter14-d.gandi.net [217.70.178.142]) by relay5-d.mail.gandi.net (Postfix) with ESMTP id AC25B41C080; Mon, 1 May 2017 01:23:50 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mfilter14-d.gandi.net Received: from relay5-d.mail.gandi.net ([IPv6:::ffff:217.70.183.197]) by mfilter14-d.gandi.net (mfilter14-d.gandi.net [::ffff:10.0.15.180]) (amavisd-new, port 10024) with ESMTP id oNX-_XKsR4ac; Mon, 1 May 2017 01:23:49 +0200 (CEST) X-Originating-IP: 173.228.112.23 Received: from sigabrt.gateway.sonic.net (173-228-112-23.dsl.dynamic.fusionbroadband.com [173.228.112.23]) (Authenticated sender: blp@ovn.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id AD87941C07D; Mon, 1 May 2017 01:23:47 +0200 (CEST) From: Ben Pfaff To: dev@openvswitch.org Date: Sun, 30 Apr 2017 16:22:28 -0700 Message-Id: <20170430232231.15151-25-blp@ovn.org> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20170430232231.15151-1-blp@ovn.org> References: <20170430232231.15151-1-blp@ovn.org> X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Ben Pfaff Subject: [ovs-dev] [PATCH 24/27] ovn-trace: Add support for partial UUID matches for ports and datapaths. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org This makes ovn-trace commands easier to type. Signed-off-by: Ben Pfaff --- ovn/utilities/ovn-trace.c | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/ovn/utilities/ovn-trace.c b/ovn/utilities/ovn-trace.c index 4346fb39268a..0bc8d602ce90 100644 --- a/ovn/utilities/ovn-trace.c +++ b/ovn/utilities/ovn-trace.c @@ -350,6 +350,7 @@ struct ovntrace_datapath { struct ovntrace_port { struct ovntrace_datapath *dp; + struct uuid uuid; char *name; char *type; uint16_t tunnel_key; @@ -427,15 +428,15 @@ ovntrace_datapath_find_by_sb_uuid(const struct uuid *sb_uuid) static const struct ovntrace_datapath * ovntrace_datapath_find_by_name(const char *name) { - struct uuid uuid; - bool is_uuid = uuid_from_string(&uuid, name); - struct ovntrace_datapath *dp; HMAP_FOR_EACH (dp, sb_uuid_node, &datapaths) { - if (!strcmp(name, dp->name) - || (is_uuid - && (uuid_equals(&uuid, &dp->sb_uuid) || - uuid_equals(&uuid, &dp->nb_uuid)))) { + if (!strcmp(name, dp->name)) { + return dp; + } + } + HMAP_FOR_EACH (dp, sb_uuid_node, &datapaths) { + if (uuid_is_partial_match(&dp->sb_uuid, name) >= 4 || + uuid_is_partial_match(&dp->nb_uuid, name) >= 4) { return dp; } } @@ -556,6 +557,7 @@ read_ports(void) continue; } port->dp = dp; + port->uuid = sbpb->header_.uuid; port->name = xstrdup(port_name); port->type = xstrdup(sbpb->type); port->tunnel_key = sbpb->tunnel_key; @@ -860,6 +862,32 @@ read_db(void) read_mac_bindings(); } +static const struct ovntrace_port * +ovntrace_port_lookup_by_name(const char *name) +{ + const struct ovntrace_port *port = shash_find_data(&ports, name); + if (port) { + return port; + } + + if (uuid_is_partial_string(name) >= 4) { + struct shash_node *node; + SHASH_FOR_EACH (node, &ports) { + const struct ovntrace_port *port = node->data; + + struct uuid name_uuid; + if (uuid_is_partial_match(&port->uuid, name) >= 4 + || (uuid_from_string(&name_uuid, port->name) + && uuid_is_partial_match(&name_uuid, name) >= 4)) { + return port; + } + } + + } + + return NULL; +} + static bool ovntrace_lookup_port(const void *dp_, const char *port_name, unsigned int *portp) @@ -871,7 +899,7 @@ ovntrace_lookup_port(const void *dp_, const char *port_name, return true; } - const struct ovntrace_port *port = shash_find_data(&ports, port_name); + const struct ovntrace_port *port = ovntrace_port_lookup_by_name(port_name); if (port) { if (port->dp == dp) { *portp = port->tunnel_key;