From patchwork Tue Jul 12 21:37:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Terry Wilson X-Patchwork-Id: 647641 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (archives.nicira.com [96.126.127.54]) by ozlabs.org (Postfix) with ESMTP id 3rpwLf508Sz9sds for ; Wed, 13 Jul 2016 07:38:18 +1000 (AEST) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id BC777108F8; Tue, 12 Jul 2016 14:38:14 -0700 (PDT) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx1e3.cudamail.com (mx1.cudamail.com [69.90.118.67]) by archives.nicira.com (Postfix) with ESMTPS id 90303106A6 for ; Tue, 12 Jul 2016 14:38:12 -0700 (PDT) Received: from bar5.cudamail.com (localhost [127.0.0.1]) by mx1e3.cudamail.com (Postfix) with ESMTPS id 1372C420737 for ; Tue, 12 Jul 2016 15:38:12 -0600 (MDT) X-ASG-Debug-ID: 1468359489-09eadd46a106f40001-byXFYA Received: from mx3-pf2.cudamail.com ([192.168.14.1]) by bar5.cudamail.com with ESMTP id Q4WZvKaIKjHobzcn (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 12 Jul 2016 15:38:09 -0600 (MDT) X-Barracuda-Envelope-From: twilson@redhat.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.14.1 Received: from unknown (HELO mx1.redhat.com) (209.132.183.28) by mx3-pf2.cudamail.com with ESMTPS (DHE-RSA-AES256-SHA encrypted); 12 Jul 2016 21:38:09 -0000 Received-SPF: pass (mx3-pf2.cudamail.com: SPF record at _spf1.redhat.com designates 209.132.183.28 as permitted sender) X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-Barracuda-RBL-IP: 209.132.183.28 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4F92564387 for ; Tue, 12 Jul 2016 21:38:08 +0000 (UTC) Received: from wlan-196-172.bos.redhat.com.localdomain (wlan-196-172.bos.redhat.com [10.16.196.172]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u6CLc6UT005030; Tue, 12 Jul 2016 17:38:07 -0400 X-CudaMail-Envelope-Sender: twilson@redhat.com From: Terry Wilson To: dev@openvswitch.org X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-V2-711052529 X-CudaMail-DTE: 071216 X-CudaMail-Originating-IP: 209.132.183.28 Date: Tue, 12 Jul 2016 16:37:34 -0500 X-ASG-Orig-Subj: [##CM-V2-711052529##][PATCH 1/2] Move lib/json.h to include/openvswitch Message-Id: <1468359455-77353-2-git-send-email-twilson@redhat.com> In-Reply-To: <1468359455-77353-1-git-send-email-twilson@redhat.com> References: <1468359455-77353-1-git-send-email-twilson@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 12 Jul 2016 21:38:08 +0000 (UTC) X-Barracuda-Connect: UNKNOWN[192.168.14.1] X-Barracuda-Start-Time: 1468359489 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-ASG-Whitelist: Header =?UTF-8?B?eFwtY3VkYW1haWxcLXdoaXRlbGlzdFwtdG8=?= X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at cudamail.com Subject: [ovs-dev] [PATCH 1/2] Move lib/json.h to include/openvswitch X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" To easily allow both in- and out-of-tree building of the Python wrapper for the OVS JSON parser (e.g. w/ pip), move json.h to include/openvswitch. This also requires moving lib/{hmap,shash}.h. Both hmap.h and shash.h were #include-ing "util.h" even though the headers themselves did not use anything from there, but rather from include/openvswitch/util.h. Fixing that required including util.h in several C files mostly due to OVS_NOT_REACHED and things like xmalloc. Signed-off-by: Terry Wilson --- include/openvswitch/automake.mk | 3 + include/openvswitch/hmap.h | 407 ++++++++++++++++++++++++++++++++++++++++ include/openvswitch/json.h | 141 ++++++++++++++ include/openvswitch/shash.h | 81 ++++++++ lib/automake.mk | 3 - lib/bfd.c | 2 +- lib/bundle.c | 1 + lib/cfm.c | 3 +- lib/cfm.h | 2 +- lib/db-ctl-base.c | 4 +- lib/db-ctl-base.h | 2 +- lib/dpctl.c | 2 +- lib/dpif-netdev.c | 2 +- lib/dpif-netlink.c | 2 +- lib/dpif.c | 2 +- lib/fat-rwlock.c | 2 +- lib/fatal-signal.c | 2 +- lib/flow.c | 1 + lib/hmap.c | 2 +- lib/hmap.h | 407 ---------------------------------------- lib/hmapx.h | 2 +- lib/id-pool.c | 2 +- lib/json.c | 4 +- lib/json.h | 140 -------------- lib/jsonrpc.c | 2 +- lib/lacp.c | 5 +- lib/learning-switch.c | 4 +- lib/lockfile.c | 2 +- lib/mac-learning.h | 2 +- lib/mcast-snooping.h | 2 +- lib/meta-flow.c | 2 +- lib/multipath.c | 1 + lib/netdev-bsd.c | 2 +- lib/netdev-dpdk.c | 2 +- lib/netdev-dummy.c | 2 +- lib/netdev-linux.c | 5 +- lib/netdev-provider.h | 2 +- lib/netdev-windows.c | 2 +- lib/netdev.c | 2 +- lib/netlink-conntrack.h | 2 +- lib/netlink-socket.c | 2 +- lib/netlink.c | 1 + lib/nx-match.c | 4 +- lib/odp-util.h | 2 +- lib/ofp-actions.c | 2 +- lib/ofp-msgs.c | 3 +- lib/ofp-parse.c | 1 + lib/ofp-util.c | 1 + lib/ovs-lldp.h | 2 +- lib/ovs-numa.c | 2 +- lib/ovs-rcu.c | 1 + lib/ovsdb-data.c | 5 +- lib/ovsdb-data.h | 2 +- lib/ovsdb-error.c | 2 +- lib/ovsdb-idl-provider.h | 4 +- lib/ovsdb-idl.c | 4 +- lib/ovsdb-map-op.c | 2 +- lib/ovsdb-parser.h | 2 +- lib/ovsdb-types.c | 3 +- lib/packets.c | 2 +- lib/pcap-file.c | 3 +- lib/perf-counter.c | 2 +- lib/poll-loop.c | 2 +- lib/reconnect.c | 1 + lib/rstp-common.h | 2 +- lib/seq.c | 2 +- lib/shash.c | 2 +- lib/shash.h | 81 -------- lib/simap.h | 2 +- lib/smap.c | 2 +- lib/smap.h | 2 +- lib/sset.h | 2 +- lib/stream-ssl.c | 2 +- lib/table.c | 2 +- lib/timeval.c | 2 +- lib/tun-metadata.c | 3 +- lib/unixctl.c | 4 +- lib/util.h | 1 + ofproto/bond.c | 5 +- ofproto/bundles.c | 2 +- ofproto/connmgr.c | 3 +- ofproto/connmgr.h | 2 +- ofproto/ofproto-dpif-ipfix.c | 2 +- ofproto/ofproto-dpif-mirror.c | 2 +- ofproto/ofproto-dpif-monitor.c | 2 +- ofproto/ofproto-dpif-sflow.c | 2 +- ofproto/ofproto-dpif-xlate.c | 1 + ofproto/ofproto-dpif.c | 1 + ofproto/ofproto-provider.h | 2 +- ofproto/ofproto.c | 5 +- ofproto/pinsched.c | 2 +- ofproto/tunnel.c | 2 +- ovn/controller-vtep/binding.c | 2 +- ovn/controller-vtep/vtep.c | 4 +- ovn/controller/binding.c | 2 +- ovn/controller/chassis.c | 1 + ovn/controller/lport.h | 2 +- ovn/controller/ofctrl.c | 2 +- ovn/controller/ovn-controller.c | 2 +- ovn/controller/patch.c | 2 +- ovn/controller/physical.c | 3 +- ovn/lib/actions.c | 4 +- ovn/lib/actions.h | 2 +- ovn/lib/expr.c | 5 +- ovn/lib/expr.h | 2 +- ovn/lib/lex.c | 2 +- ovn/lib/ovn-dhcp.h | 2 +- ovn/northd/ovn-northd.c | 4 +- ovn/utilities/ovn-nbctl.c | 2 +- ovn/utilities/ovn-sbctl.c | 4 +- ovsdb/column.c | 2 +- ovsdb/condition.c | 6 +- ovsdb/execution.c | 2 +- ovsdb/file.c | 2 +- ovsdb/jsonrpc-server.c | 3 +- ovsdb/log.c | 2 +- ovsdb/monitor.c | 3 +- ovsdb/mutation.c | 6 +- ovsdb/ovsdb-client.c | 2 +- ovsdb/ovsdb-server.c | 4 +- ovsdb/ovsdb-tool.c | 2 +- ovsdb/ovsdb.c | 2 +- ovsdb/ovsdb.h | 4 +- ovsdb/replication.c | 2 +- ovsdb/replication.h | 2 +- ovsdb/row.c | 5 +- ovsdb/row.h | 2 +- ovsdb/server.h | 4 +- ovsdb/table.c | 2 +- ovsdb/table.h | 4 +- ovsdb/transaction.c | 4 +- ovsdb/trigger.c | 2 +- python/ovs/_json.c | 2 +- tests/test-ccmap.c | 2 +- tests/test-cmap.c | 2 +- tests/test-hmap.c | 2 +- tests/test-json.c | 2 +- tests/test-jsonrpc.c | 2 +- tests/test-ovn.c | 2 +- tests/test-ovsdb.c | 2 +- utilities/ovs-vsctl.c | 2 +- vswitchd/bridge.c | 4 +- vswitchd/system-stats.c | 4 +- vtep/vtep-ctl.c | 2 +- 144 files changed, 817 insertions(+), 780 deletions(-) create mode 100644 include/openvswitch/hmap.h create mode 100644 include/openvswitch/json.h create mode 100644 include/openvswitch/shash.h delete mode 100644 lib/hmap.h delete mode 100644 lib/json.h delete mode 100644 lib/shash.h diff --git a/include/openvswitch/automake.mk b/include/openvswitch/automake.mk index d8541dc..c0e276f 100644 --- a/include/openvswitch/automake.mk +++ b/include/openvswitch/automake.mk @@ -2,8 +2,10 @@ openvswitchincludedir = $(includedir)/openvswitch openvswitchinclude_HEADERS = \ include/openvswitch/compiler.h \ include/openvswitch/dynamic-string.h \ + include/openvswitch/hmap.h \ include/openvswitch/flow.h \ include/openvswitch/geneve.h \ + include/openvswitch/json.h \ include/openvswitch/list.h \ include/openvswitch/netdev.h \ include/openvswitch/match.h \ @@ -17,6 +19,7 @@ openvswitchinclude_HEADERS = \ include/openvswitch/ofp-prop.h \ include/openvswitch/ofp-util.h \ include/openvswitch/packets.h \ + include/openvswitch/shash.h \ include/openvswitch/thread.h \ include/openvswitch/token-bucket.h \ include/openvswitch/tun-metadata.h \ diff --git a/include/openvswitch/hmap.h b/include/openvswitch/hmap.h new file mode 100644 index 0000000..ef272a6 --- /dev/null +++ b/include/openvswitch/hmap.h @@ -0,0 +1,407 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2012, 2013, 2015, 2016 Nicira, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef HMAP_H +#define HMAP_H 1 + +#include +#include +#include "openvswitch/util.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* A hash map node, to be embedded inside the data structure being mapped. */ +struct hmap_node { + size_t hash; /* Hash value. */ + struct hmap_node *next; /* Next in linked list. */ +}; + +/* Returns the hash value embedded in 'node'. */ +static inline size_t hmap_node_hash(const struct hmap_node *node) +{ + return node->hash; +} + +#define HMAP_NODE_NULL ((struct hmap_node *) 1) +#define HMAP_NODE_NULL_INITIALIZER { 0, HMAP_NODE_NULL } + +/* Returns true if 'node' has been set to null by hmap_node_nullify() and has + * not been un-nullified by being inserted into an hmap. */ +static inline bool +hmap_node_is_null(const struct hmap_node *node) +{ + return node->next == HMAP_NODE_NULL; +} + +/* Marks 'node' with a distinctive value that can be tested with + * hmap_node_is_null(). */ +static inline void +hmap_node_nullify(struct hmap_node *node) +{ + node->next = HMAP_NODE_NULL; +} + +/* A hash map. */ +struct hmap { + struct hmap_node **buckets; /* Must point to 'one' iff 'mask' == 0. */ + struct hmap_node *one; + size_t mask; + size_t n; +}; + +/* Initializer for an empty hash map. */ +#define HMAP_INITIALIZER(HMAP) \ + { (struct hmap_node **const) &(HMAP)->one, NULL, 0, 0 } + +/* Initializer for an immutable struct hmap 'HMAP' that contains a single + * 'NODE'. */ +#define HMAP_CONST1(HMAP, NODE) { \ + CONST_CAST(struct hmap_node **, &(HMAP)->one), NODE, 0, 1 } +#define HMAP_NODE_INIT(HASH) { HASH, NULL } + +/* Initialization. */ +void hmap_init(struct hmap *); +void hmap_destroy(struct hmap *); +void hmap_clear(struct hmap *); +void hmap_swap(struct hmap *a, struct hmap *b); +void hmap_moved(struct hmap *hmap); +static inline size_t hmap_count(const struct hmap *); +static inline bool hmap_is_empty(const struct hmap *); + +/* Adjusting capacity. */ +void hmap_expand_at(struct hmap *, const char *where); +#define hmap_expand(HMAP) hmap_expand_at(HMAP, OVS_SOURCE_LOCATOR) + +void hmap_shrink_at(struct hmap *, const char *where); +#define hmap_shrink(HMAP) hmap_shrink_at(HMAP, OVS_SOURCE_LOCATOR) + +void hmap_reserve_at(struct hmap *, size_t capacity, const char *where); +#define hmap_reserve(HMAP, CAPACITY) \ + hmap_reserve_at(HMAP, CAPACITY, OVS_SOURCE_LOCATOR) + +/* Insertion and deletion. */ +static inline void hmap_insert_at(struct hmap *, struct hmap_node *, + size_t hash, const char *where); +#define hmap_insert(HMAP, NODE, HASH) \ + hmap_insert_at(HMAP, NODE, HASH, OVS_SOURCE_LOCATOR) + +static inline void hmap_insert_fast(struct hmap *, + struct hmap_node *, size_t hash); +static inline void hmap_remove(struct hmap *, struct hmap_node *); + +void hmap_node_moved(struct hmap *, struct hmap_node *, struct hmap_node *); +static inline void hmap_replace(struct hmap *, const struct hmap_node *old, + struct hmap_node *new_node); + +struct hmap_node *hmap_random_node(const struct hmap *); + +/* Search. + * + * HMAP_FOR_EACH_WITH_HASH iterates NODE over all of the nodes in HMAP that + * have hash value equal to HASH. HMAP_FOR_EACH_IN_BUCKET iterates NODE over + * all of the nodes in HMAP that would fall in the same bucket as HASH. MEMBER + * must be the name of the 'struct hmap_node' member within NODE. + * + * These macros may be used interchangeably to search for a particular value in + * an hmap, see, e.g. shash_find() for an example. Usually, using + * HMAP_FOR_EACH_WITH_HASH provides an optimization, because comparing a hash + * value is usually cheaper than comparing an entire hash map key. But for + * simple hash map keys, it makes sense to use HMAP_FOR_EACH_IN_BUCKET because + * it avoids doing two comparisons when a single simple comparison suffices. + * + * The loop should not change NODE to point to a different node or insert or + * delete nodes in HMAP (unless it "break"s out of the loop to terminate + * iteration). + * + * HASH is only evaluated once. + * + * When the loop terminates normally, meaning the iteration has completed + * without using 'break', NODE will be NULL. This is true for all of the + * HMAP_FOR_EACH_*() macros. + */ +#define HMAP_FOR_EACH_WITH_HASH(NODE, MEMBER, HASH, HMAP) \ + for (INIT_CONTAINER(NODE, hmap_first_with_hash(HMAP, HASH), MEMBER); \ + (NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL); \ + ASSIGN_CONTAINER(NODE, hmap_next_with_hash(&(NODE)->MEMBER), \ + MEMBER)) +#define HMAP_FOR_EACH_IN_BUCKET(NODE, MEMBER, HASH, HMAP) \ + for (INIT_CONTAINER(NODE, hmap_first_in_bucket(HMAP, HASH), MEMBER); \ + (NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL); \ + ASSIGN_CONTAINER(NODE, hmap_next_in_bucket(&(NODE)->MEMBER), MEMBER)) + +static inline struct hmap_node *hmap_first_with_hash(const struct hmap *, + size_t hash); +static inline struct hmap_node *hmap_next_with_hash(const struct hmap_node *); +static inline struct hmap_node *hmap_first_in_bucket(const struct hmap *, + size_t hash); +static inline struct hmap_node *hmap_next_in_bucket(const struct hmap_node *); + +bool hmap_contains(const struct hmap *, const struct hmap_node *); + +/* Iteration. + * + * The *_INIT variants of these macros additionally evaluate the expressions + * supplied following the HMAP argument once during the loop initialization. + * This makes it possible for data structures that wrap around hmaps to insert + * additional initialization into their iteration macros without having to + * completely rewrite them. In particular, it can be a good idea to insert + * BUILD_ASSERT_TYPE checks for map and node types that wrap hmap, since + * otherwise it is possible for clients to accidentally confuse two derived + * data structures that happen to use the same member names for struct hmap and + * struct hmap_node. */ + +/* Iterates through every node in HMAP. */ +#define HMAP_FOR_EACH(NODE, MEMBER, HMAP) \ + HMAP_FOR_EACH_INIT(NODE, MEMBER, HMAP, (void) 0) +#define HMAP_FOR_EACH_INIT(NODE, MEMBER, HMAP, ...) \ + for (INIT_CONTAINER(NODE, hmap_first(HMAP), MEMBER), __VA_ARGS__; \ + (NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL); \ + ASSIGN_CONTAINER(NODE, hmap_next(HMAP, &(NODE)->MEMBER), MEMBER)) + +/* Safe when NODE may be freed (not needed when NODE may be removed from the + * hash map but its members remain accessible and intact). */ +#define HMAP_FOR_EACH_SAFE(NODE, NEXT, MEMBER, HMAP) \ + HMAP_FOR_EACH_SAFE_INIT(NODE, NEXT, MEMBER, HMAP, (void) 0) +#define HMAP_FOR_EACH_SAFE_INIT(NODE, NEXT, MEMBER, HMAP, ...) \ + for (INIT_CONTAINER(NODE, hmap_first(HMAP), MEMBER), __VA_ARGS__; \ + ((NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL) \ + ? INIT_CONTAINER(NEXT, hmap_next(HMAP, &(NODE)->MEMBER), MEMBER), 1 \ + : 0); \ + (NODE) = (NEXT)) + +/* Continues an iteration from just after NODE. */ +#define HMAP_FOR_EACH_CONTINUE(NODE, MEMBER, HMAP) \ + HMAP_FOR_EACH_CONTINUE_INIT(NODE, MEMBER, HMAP, (void) 0) +#define HMAP_FOR_EACH_CONTINUE_INIT(NODE, MEMBER, HMAP, ...) \ + for (ASSIGN_CONTAINER(NODE, hmap_next(HMAP, &(NODE)->MEMBER), MEMBER), \ + __VA_ARGS__; \ + (NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL); \ + ASSIGN_CONTAINER(NODE, hmap_next(HMAP, &(NODE)->MEMBER), MEMBER)) + +static inline struct hmap_node * +hmap_pop_helper__(struct hmap *hmap, size_t *bucket) { + + for (; *bucket <= hmap->mask; (*bucket)++) { + struct hmap_node *node = hmap->buckets[*bucket]; + + if (node) { + hmap_remove(hmap, node); + return node; + } + } + + return NULL; +} + +#define HMAP_FOR_EACH_POP(NODE, MEMBER, HMAP) \ + for (size_t bucket__ = 0; \ + INIT_CONTAINER(NODE, hmap_pop_helper__(HMAP, &bucket__), MEMBER), \ + (NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL);) + +static inline struct hmap_node *hmap_first(const struct hmap *); +static inline struct hmap_node *hmap_next(const struct hmap *, + const struct hmap_node *); + +struct hmap_position { + unsigned int bucket; + unsigned int offset; +}; + +struct hmap_node *hmap_at_position(const struct hmap *, + struct hmap_position *); + +/* Returns the number of nodes currently in 'hmap'. */ +static inline size_t +hmap_count(const struct hmap *hmap) +{ + return hmap->n; +} + +/* Returns the maximum number of nodes that 'hmap' may hold before it should be + * rehashed. */ +static inline size_t +hmap_capacity(const struct hmap *hmap) +{ + return hmap->mask * 2 + 1; +} + +/* Returns true if 'hmap' currently contains no nodes, + * false otherwise. + * Note: While hmap in general is not thread-safe without additional locking, + * hmap_is_empty() is. */ +static inline bool +hmap_is_empty(const struct hmap *hmap) +{ + return hmap->n == 0; +} + +/* Inserts 'node', with the given 'hash', into 'hmap'. 'hmap' is never + * expanded automatically. */ +static inline void +hmap_insert_fast(struct hmap *hmap, struct hmap_node *node, size_t hash) +{ + struct hmap_node **bucket = &hmap->buckets[hash & hmap->mask]; + node->hash = hash; + node->next = *bucket; + *bucket = node; + hmap->n++; +} + +/* Inserts 'node', with the given 'hash', into 'hmap', and expands 'hmap' if + * necessary to optimize search performance. + * + * ('where' is used in debug logging. Commonly one would use hmap_insert() to + * automatically provide the caller's source file and line number for + * 'where'.) */ +static inline void +hmap_insert_at(struct hmap *hmap, struct hmap_node *node, size_t hash, + const char *where) +{ + hmap_insert_fast(hmap, node, hash); + if (hmap->n / 2 > hmap->mask) { + hmap_expand_at(hmap, where); + } +} + +/* Removes 'node' from 'hmap'. Does not shrink the hash table; call + * hmap_shrink() directly if desired. */ +static inline void +hmap_remove(struct hmap *hmap, struct hmap_node *node) +{ + struct hmap_node **bucket = &hmap->buckets[node->hash & hmap->mask]; + while (*bucket != node) { + bucket = &(*bucket)->next; + } + *bucket = node->next; + hmap->n--; +} + +/* Puts 'new_node' in the position in 'hmap' currently occupied by 'old_node'. + * The 'new_node' must hash to the same value as 'old_node'. The client is + * responsible for ensuring that the replacement does not violate any + * client-imposed invariants (e.g. uniqueness of keys within a map). + * + * Afterward, 'old_node' is not part of 'hmap', and the client is responsible + * for freeing it (if this is desirable). */ +static inline void +hmap_replace(struct hmap *hmap, + const struct hmap_node *old_node, struct hmap_node *new_node) +{ + struct hmap_node **bucket = &hmap->buckets[old_node->hash & hmap->mask]; + while (*bucket != old_node) { + bucket = &(*bucket)->next; + } + *bucket = new_node; + new_node->hash = old_node->hash; + new_node->next = old_node->next; +} + +static inline struct hmap_node * +hmap_next_with_hash__(const struct hmap_node *node, size_t hash) +{ + while (node != NULL && node->hash != hash) { + node = node->next; + } + return CONST_CAST(struct hmap_node *, node); +} + +/* Returns the first node in 'hmap' with the given 'hash', or a null pointer if + * no nodes have that hash value. */ +static inline struct hmap_node * +hmap_first_with_hash(const struct hmap *hmap, size_t hash) +{ + return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash); +} + +/* Returns the first node in 'hmap' in the bucket in which the given 'hash' + * would land, or a null pointer if that bucket is empty. */ +static inline struct hmap_node * +hmap_first_in_bucket(const struct hmap *hmap, size_t hash) +{ + return hmap->buckets[hash & hmap->mask]; +} + +/* Returns the next node in the same bucket as 'node', or a null pointer if + * there are no more nodes in that bucket. + * + * If the hash map has been reallocated since 'node' was visited, some nodes + * may be skipped; if new nodes with the same hash value have been added, they + * will be skipped. (Removing 'node' from the hash map does not prevent + * calling this function, since node->next is preserved, although freeing + * 'node' of course does.) */ +static inline struct hmap_node * +hmap_next_in_bucket(const struct hmap_node *node) +{ + return node->next; +} + +/* Returns the next node in the same hash map as 'node' with the same hash + * value, or a null pointer if no more nodes have that hash value. + * + * If the hash map has been reallocated since 'node' was visited, some nodes + * may be skipped; if new nodes with the same hash value have been added, they + * will be skipped. (Removing 'node' from the hash map does not prevent + * calling this function, since node->next is preserved, although freeing + * 'node' of course does.) */ +static inline struct hmap_node * +hmap_next_with_hash(const struct hmap_node *node) +{ + return hmap_next_with_hash__(node->next, node->hash); +} + +static inline struct hmap_node * +hmap_next__(const struct hmap *hmap, size_t start) +{ + size_t i; + for (i = start; i <= hmap->mask; i++) { + struct hmap_node *node = hmap->buckets[i]; + if (node) { + return node; + } + } + return NULL; +} + +/* Returns the first node in 'hmap', in arbitrary order, or a null pointer if + * 'hmap' is empty. */ +static inline struct hmap_node * +hmap_first(const struct hmap *hmap) +{ + return hmap_next__(hmap, 0); +} + +/* Returns the next node in 'hmap' following 'node', in arbitrary order, or a + * null pointer if 'node' is the last node in 'hmap'. + * + * If the hash map has been reallocated since 'node' was visited, some nodes + * may be skipped or visited twice. (Removing 'node' from the hash map does + * not prevent calling this function, since node->next is preserved, although + * freeing 'node' of course does.) */ +static inline struct hmap_node * +hmap_next(const struct hmap *hmap, const struct hmap_node *node) +{ + return (node->next + ? node->next + : hmap_next__(hmap, (node->hash & hmap->mask) + 1)); +} + +#ifdef __cplusplus +} +#endif + +#endif /* hmap.h */ diff --git a/include/openvswitch/json.h b/include/openvswitch/json.h new file mode 100644 index 0000000..13f346c --- /dev/null +++ b/include/openvswitch/json.h @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2009, 2010, 2015 Nicira, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef JSON_H +#define JSON_H 1 + +/* This is an implementation of JavaScript Object Notation (JSON) as specified + * by RFC 4627. It is intended to fully comply with RFC 4627, with the + * following known exceptions and clarifications: + * + * - Null bytes (\u0000) are not allowed in strings. + * + * - Only UTF-8 encoding is supported (RFC 4627 allows for other Unicode + * encodings). + * + * - Names within an object must be unique (RFC 4627 says that they + * "should" be unique). + */ + +#include +#include "openvswitch/shash.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct ds; + +/* Type of a JSON value. */ +enum json_type { + JSON_NULL, /* null */ + JSON_FALSE, /* false */ + JSON_TRUE, /* true */ + JSON_OBJECT, /* {"a": b, "c": d, ...} */ + JSON_ARRAY, /* [1, 2, 3, ...] */ + JSON_INTEGER, /* 123. */ + JSON_REAL, /* 123.456. */ + JSON_STRING, /* "..." */ + JSON_N_TYPES +}; + +const char *json_type_to_string(enum json_type); + +/* A JSON array. */ +struct json_array { + size_t n, n_allocated; + struct json **elems; +}; + +/* A JSON value. */ +struct json { + enum json_type type; + union { + struct shash *object; /* Contains "struct json *"s. */ + struct json_array array; + long long int integer; + double real; + char *string; + } u; +}; + +struct json *json_null_create(void); +struct json *json_boolean_create(bool); +struct json *json_string_create(const char *); +struct json *json_string_create_nocopy(char *); +struct json *json_integer_create(long long int); +struct json *json_real_create(double); + +struct json *json_array_create_empty(void); +void json_array_add(struct json *, struct json *element); +void json_array_trim(struct json *); +struct json *json_array_create(struct json **, size_t n); +struct json *json_array_create_1(struct json *); +struct json *json_array_create_2(struct json *, struct json *); +struct json *json_array_create_3(struct json *, struct json *, struct json *); + +struct json *json_object_create(void); +void json_object_put(struct json *, const char *name, struct json *value); +void json_object_put_string(struct json *, + const char *name, const char *value); + +const char *json_string(const struct json *); +struct json_array *json_array(const struct json *); +struct shash *json_object(const struct json *); +bool json_boolean(const struct json *); +double json_real(const struct json *); +int64_t json_integer(const struct json *); + +struct json *json_clone(const struct json *); +void json_destroy(struct json *); + +size_t json_hash(const struct json *, size_t basis); +bool json_equal(const struct json *, const struct json *); + +/* Parsing JSON. */ +enum { + JSPF_TRAILER = 1 << 0 /* Check for garbage following input. */ +}; + +struct json_parser *json_parser_create(int flags); +size_t json_parser_feed(struct json_parser *, const char *, size_t); +bool json_parser_is_done(const struct json_parser *); +struct json *json_parser_finish(struct json_parser *); +void json_parser_abort(struct json_parser *); + +struct json *json_from_string(const char *string); +struct json *json_from_file(const char *file_name); +struct json *json_from_stream(FILE *stream); + +/* Serializing JSON. */ + +enum { + JSSF_PRETTY = 1 << 0, /* Multiple lines with indentation, if true. */ + JSSF_SORT = 1 << 1 /* Object members in sorted order, if true. */ +}; +char *json_to_string(const struct json *, int flags); +void json_to_ds(const struct json *, int flags, struct ds *); + +/* JSON string formatting operations. */ + +bool json_string_unescape(const char *in, size_t in_len, char **outp); +void json_string_escape(const char *in, struct ds *out); + +#ifdef __cplusplus +} +#endif + +#endif /* json.h */ diff --git a/include/openvswitch/shash.h b/include/openvswitch/shash.h new file mode 100644 index 0000000..afc4823 --- /dev/null +++ b/include/openvswitch/shash.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2009, 2010, 2011, 2016 Nicira, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SHASH_H +#define SHASH_H 1 + +#include "openvswitch/hmap.h" +#include "openvswitch/util.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct shash_node { + struct hmap_node node; + char *name; + void *data; +}; + +struct shash { + struct hmap map; +}; + +#define SHASH_INITIALIZER(SHASH) { HMAP_INITIALIZER(&(SHASH)->map) } + +#define SHASH_FOR_EACH(SHASH_NODE, SHASH) \ + HMAP_FOR_EACH_INIT (SHASH_NODE, node, &(SHASH)->map, \ + BUILD_ASSERT_TYPE(SHASH_NODE, struct shash_node *), \ + BUILD_ASSERT_TYPE(SHASH, struct shash *)) + +#define SHASH_FOR_EACH_SAFE(SHASH_NODE, NEXT, SHASH) \ + HMAP_FOR_EACH_SAFE_INIT ( \ + SHASH_NODE, NEXT, node, &(SHASH)->map, \ + BUILD_ASSERT_TYPE(SHASH_NODE, struct shash_node *), \ + BUILD_ASSERT_TYPE(NEXT, struct shash_node *), \ + BUILD_ASSERT_TYPE(SHASH, struct shash *)) + +void shash_init(struct shash *); +void shash_destroy(struct shash *); +void shash_destroy_free_data(struct shash *); +void shash_swap(struct shash *, struct shash *); +void shash_moved(struct shash *); +void shash_clear(struct shash *); +void shash_clear_free_data(struct shash *); +bool shash_is_empty(const struct shash *); +size_t shash_count(const struct shash *); +struct shash_node *shash_add(struct shash *, const char *, const void *); +struct shash_node *shash_add_nocopy(struct shash *, char *, const void *); +bool shash_add_once(struct shash *, const char *, const void *); +void shash_add_assert(struct shash *, const char *, const void *); +void *shash_replace(struct shash *, const char *, const void *data); +void shash_delete(struct shash *, struct shash_node *); +char *shash_steal(struct shash *, struct shash_node *); +struct shash_node *shash_find(const struct shash *, const char *); +struct shash_node *shash_find_len(const struct shash *, const char *, size_t); +void *shash_find_data(const struct shash *, const char *); +void *shash_find_and_delete(struct shash *, const char *); +void *shash_find_and_delete_assert(struct shash *, const char *); +struct shash_node *shash_first(const struct shash *); +const struct shash_node **shash_sort(const struct shash *); +bool shash_equal_keys(const struct shash *, const struct shash *); +struct shash_node *shash_random_node(struct shash *); + +#ifdef __cplusplus +} +#endif + +#endif /* shash.h */ diff --git a/lib/automake.mk b/lib/automake.mk index 4d4ee01..3aaf2c5 100644 --- a/lib/automake.mk +++ b/lib/automake.mk @@ -94,7 +94,6 @@ lib_libopenvswitch_la_SOURCES = \ lib/hindex.c \ lib/hindex.h \ lib/hmap.c \ - lib/hmap.h \ lib/hmapx.c \ lib/hmapx.h \ lib/id-pool.c \ @@ -102,7 +101,6 @@ lib_libopenvswitch_la_SOURCES = \ lib/jhash.c \ lib/jhash.h \ lib/json.c \ - lib/json.h \ lib/jsonrpc.c \ lib/jsonrpc.h \ lib/lacp.c \ @@ -217,7 +215,6 @@ lib_libopenvswitch_la_SOURCES = \ lib/sha1.c \ lib/sha1.h \ lib/shash.c \ - lib/shash.h \ lib/simap.c \ lib/simap.h \ lib/smap.c \ diff --git a/lib/bfd.c b/lib/bfd.c index 9616c90..8dac953 100644 --- a/lib/bfd.c +++ b/lib/bfd.c @@ -29,7 +29,7 @@ #include "openvswitch/dynamic-string.h" #include "flow.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" #include "netdev.h" #include "odp-util.h" diff --git a/lib/bundle.c b/lib/bundle.c index eaaf068..7fc02e2 100644 --- a/lib/bundle.c +++ b/lib/bundle.c @@ -31,6 +31,7 @@ #include "openvswitch/ofp-util.h" #include "openvswitch/ofpbuf.h" #include "openvswitch/vlog.h" +#include "util.h" VLOG_DEFINE_THIS_MODULE(bundle); diff --git a/lib/cfm.c b/lib/cfm.c index fb077de..7bc22e3 100644 --- a/lib/cfm.c +++ b/lib/cfm.c @@ -27,7 +27,7 @@ #include "openvswitch/dynamic-string.h" #include "flow.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "netdev.h" #include "ovs-atomic.h" #include "packets.h" @@ -38,6 +38,7 @@ #include "timeval.h" #include "unixctl.h" #include "openvswitch/vlog.h" +#include "util.h" VLOG_DEFINE_THIS_MODULE(cfm); diff --git a/lib/cfm.h b/lib/cfm.h index 98d48b3..5710c99 100644 --- a/lib/cfm.h +++ b/lib/cfm.h @@ -18,7 +18,7 @@ #include -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/types.h" #include "packets.h" diff --git a/lib/db-ctl-base.c b/lib/db-ctl-base.c index 9f50c6c..02eb328 100644 --- a/lib/db-ctl-base.c +++ b/lib/db-ctl-base.c @@ -28,12 +28,12 @@ #include "openvswitch/dynamic-string.h" #include "fatal-signal.h" #include "hash.h" -#include "json.h" +#include "openvswitch/json.h" #include "openvswitch/vlog.h" #include "ovsdb-data.h" #include "ovsdb-idl.h" #include "ovsdb-idl-provider.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "sset.h" #include "string.h" #include "table.h" diff --git a/lib/db-ctl-base.h b/lib/db-ctl-base.h index f8f576b..0f4658e 100644 --- a/lib/db-ctl-base.h +++ b/lib/db-ctl-base.h @@ -19,7 +19,7 @@ #include "compiler.h" #include "openvswitch/dynamic-string.h" -#include "shash.h" +#include "openvswitch/shash.h" struct ctl_context; struct option; diff --git a/lib/dpctl.c b/lib/dpctl.c index b870e30..79eb0f7 100644 --- a/lib/dpctl.c +++ b/lib/dpctl.c @@ -42,7 +42,7 @@ #include "openvswitch/ofpbuf.h" #include "ovs-numa.h" #include "packets.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "simap.h" #include "smap.h" #include "sset.h" diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index e0107b7..d5d7b7e 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -62,7 +62,7 @@ #include "pvector.h" #include "random.h" #include "seq.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "sset.h" #include "timeval.h" #include "tnl-neigh-cache.h" diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c index e2bea23..d544072 100644 --- a/lib/dpif-netlink.c +++ b/lib/dpif-netlink.c @@ -49,7 +49,7 @@ #include "packets.h" #include "poll-loop.h" #include "random.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "sset.h" #include "timeval.h" #include "unaligned.h" diff --git a/lib/dpif.c b/lib/dpif.c index 5f1be41..bb2c4e6 100644 --- a/lib/dpif.c +++ b/lib/dpif.c @@ -40,7 +40,7 @@ #include "poll-loop.h" #include "route-table.h" #include "seq.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "sset.h" #include "timeval.h" #include "tnl-neigh-cache.h" diff --git a/lib/fat-rwlock.c b/lib/fat-rwlock.c index 2f42b05..19b7149 100644 --- a/lib/fat-rwlock.c +++ b/lib/fat-rwlock.c @@ -20,7 +20,7 @@ #include -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" #include "ovs-thread.h" #include "random.h" diff --git a/lib/fatal-signal.c b/lib/fatal-signal.c index 021c869..7b9813d 100644 --- a/lib/fatal-signal.c +++ b/lib/fatal-signal.c @@ -25,7 +25,7 @@ #include #include "ovs-thread.h" #include "poll-loop.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "sset.h" #include "signals.h" #include "socket-util.h" diff --git a/lib/flow.c b/lib/flow.c index a4c1215..37af208 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -39,6 +39,7 @@ #include "odp-util.h" #include "random.h" #include "unaligned.h" +#include "util.h" COVERAGE_DEFINE(flow_extract); COVERAGE_DEFINE(miniflow_malloc); diff --git a/lib/hmap.c b/lib/hmap.c index 9462c5e..1ba4a57 100644 --- a/lib/hmap.c +++ b/lib/hmap.c @@ -15,7 +15,7 @@ */ #include -#include "hmap.h" +#include "openvswitch/hmap.h" #include #include #include "coverage.h" diff --git a/lib/hmap.h b/lib/hmap.h deleted file mode 100644 index ea6c4e0..0000000 --- a/lib/hmap.h +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Copyright (c) 2008, 2009, 2010, 2012, 2013, 2015, 2016 Nicira, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef HMAP_H -#define HMAP_H 1 - -#include -#include -#include "util.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* A hash map node, to be embedded inside the data structure being mapped. */ -struct hmap_node { - size_t hash; /* Hash value. */ - struct hmap_node *next; /* Next in linked list. */ -}; - -/* Returns the hash value embedded in 'node'. */ -static inline size_t hmap_node_hash(const struct hmap_node *node) -{ - return node->hash; -} - -#define HMAP_NODE_NULL ((struct hmap_node *) 1) -#define HMAP_NODE_NULL_INITIALIZER { 0, HMAP_NODE_NULL } - -/* Returns true if 'node' has been set to null by hmap_node_nullify() and has - * not been un-nullified by being inserted into an hmap. */ -static inline bool -hmap_node_is_null(const struct hmap_node *node) -{ - return node->next == HMAP_NODE_NULL; -} - -/* Marks 'node' with a distinctive value that can be tested with - * hmap_node_is_null(). */ -static inline void -hmap_node_nullify(struct hmap_node *node) -{ - node->next = HMAP_NODE_NULL; -} - -/* A hash map. */ -struct hmap { - struct hmap_node **buckets; /* Must point to 'one' iff 'mask' == 0. */ - struct hmap_node *one; - size_t mask; - size_t n; -}; - -/* Initializer for an empty hash map. */ -#define HMAP_INITIALIZER(HMAP) \ - { (struct hmap_node **const) &(HMAP)->one, NULL, 0, 0 } - -/* Initializer for an immutable struct hmap 'HMAP' that contains a single - * 'NODE'. */ -#define HMAP_CONST1(HMAP, NODE) { \ - CONST_CAST(struct hmap_node **, &(HMAP)->one), NODE, 0, 1 } -#define HMAP_NODE_INIT(HASH) { HASH, NULL } - -/* Initialization. */ -void hmap_init(struct hmap *); -void hmap_destroy(struct hmap *); -void hmap_clear(struct hmap *); -void hmap_swap(struct hmap *a, struct hmap *b); -void hmap_moved(struct hmap *hmap); -static inline size_t hmap_count(const struct hmap *); -static inline bool hmap_is_empty(const struct hmap *); - -/* Adjusting capacity. */ -void hmap_expand_at(struct hmap *, const char *where); -#define hmap_expand(HMAP) hmap_expand_at(HMAP, OVS_SOURCE_LOCATOR) - -void hmap_shrink_at(struct hmap *, const char *where); -#define hmap_shrink(HMAP) hmap_shrink_at(HMAP, OVS_SOURCE_LOCATOR) - -void hmap_reserve_at(struct hmap *, size_t capacity, const char *where); -#define hmap_reserve(HMAP, CAPACITY) \ - hmap_reserve_at(HMAP, CAPACITY, OVS_SOURCE_LOCATOR) - -/* Insertion and deletion. */ -static inline void hmap_insert_at(struct hmap *, struct hmap_node *, - size_t hash, const char *where); -#define hmap_insert(HMAP, NODE, HASH) \ - hmap_insert_at(HMAP, NODE, HASH, OVS_SOURCE_LOCATOR) - -static inline void hmap_insert_fast(struct hmap *, - struct hmap_node *, size_t hash); -static inline void hmap_remove(struct hmap *, struct hmap_node *); - -void hmap_node_moved(struct hmap *, struct hmap_node *, struct hmap_node *); -static inline void hmap_replace(struct hmap *, const struct hmap_node *old, - struct hmap_node *new_node); - -struct hmap_node *hmap_random_node(const struct hmap *); - -/* Search. - * - * HMAP_FOR_EACH_WITH_HASH iterates NODE over all of the nodes in HMAP that - * have hash value equal to HASH. HMAP_FOR_EACH_IN_BUCKET iterates NODE over - * all of the nodes in HMAP that would fall in the same bucket as HASH. MEMBER - * must be the name of the 'struct hmap_node' member within NODE. - * - * These macros may be used interchangeably to search for a particular value in - * an hmap, see, e.g. shash_find() for an example. Usually, using - * HMAP_FOR_EACH_WITH_HASH provides an optimization, because comparing a hash - * value is usually cheaper than comparing an entire hash map key. But for - * simple hash map keys, it makes sense to use HMAP_FOR_EACH_IN_BUCKET because - * it avoids doing two comparisons when a single simple comparison suffices. - * - * The loop should not change NODE to point to a different node or insert or - * delete nodes in HMAP (unless it "break"s out of the loop to terminate - * iteration). - * - * HASH is only evaluated once. - * - * When the loop terminates normally, meaning the iteration has completed - * without using 'break', NODE will be NULL. This is true for all of the - * HMAP_FOR_EACH_*() macros. - */ -#define HMAP_FOR_EACH_WITH_HASH(NODE, MEMBER, HASH, HMAP) \ - for (INIT_CONTAINER(NODE, hmap_first_with_hash(HMAP, HASH), MEMBER); \ - (NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL); \ - ASSIGN_CONTAINER(NODE, hmap_next_with_hash(&(NODE)->MEMBER), \ - MEMBER)) -#define HMAP_FOR_EACH_IN_BUCKET(NODE, MEMBER, HASH, HMAP) \ - for (INIT_CONTAINER(NODE, hmap_first_in_bucket(HMAP, HASH), MEMBER); \ - (NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL); \ - ASSIGN_CONTAINER(NODE, hmap_next_in_bucket(&(NODE)->MEMBER), MEMBER)) - -static inline struct hmap_node *hmap_first_with_hash(const struct hmap *, - size_t hash); -static inline struct hmap_node *hmap_next_with_hash(const struct hmap_node *); -static inline struct hmap_node *hmap_first_in_bucket(const struct hmap *, - size_t hash); -static inline struct hmap_node *hmap_next_in_bucket(const struct hmap_node *); - -bool hmap_contains(const struct hmap *, const struct hmap_node *); - -/* Iteration. - * - * The *_INIT variants of these macros additionally evaluate the expressions - * supplied following the HMAP argument once during the loop initialization. - * This makes it possible for data structures that wrap around hmaps to insert - * additional initialization into their iteration macros without having to - * completely rewrite them. In particular, it can be a good idea to insert - * BUILD_ASSERT_TYPE checks for map and node types that wrap hmap, since - * otherwise it is possible for clients to accidentally confuse two derived - * data structures that happen to use the same member names for struct hmap and - * struct hmap_node. */ - -/* Iterates through every node in HMAP. */ -#define HMAP_FOR_EACH(NODE, MEMBER, HMAP) \ - HMAP_FOR_EACH_INIT(NODE, MEMBER, HMAP, (void) 0) -#define HMAP_FOR_EACH_INIT(NODE, MEMBER, HMAP, ...) \ - for (INIT_CONTAINER(NODE, hmap_first(HMAP), MEMBER), __VA_ARGS__; \ - (NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL); \ - ASSIGN_CONTAINER(NODE, hmap_next(HMAP, &(NODE)->MEMBER), MEMBER)) - -/* Safe when NODE may be freed (not needed when NODE may be removed from the - * hash map but its members remain accessible and intact). */ -#define HMAP_FOR_EACH_SAFE(NODE, NEXT, MEMBER, HMAP) \ - HMAP_FOR_EACH_SAFE_INIT(NODE, NEXT, MEMBER, HMAP, (void) 0) -#define HMAP_FOR_EACH_SAFE_INIT(NODE, NEXT, MEMBER, HMAP, ...) \ - for (INIT_CONTAINER(NODE, hmap_first(HMAP), MEMBER), __VA_ARGS__; \ - ((NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL) \ - ? INIT_CONTAINER(NEXT, hmap_next(HMAP, &(NODE)->MEMBER), MEMBER), 1 \ - : 0); \ - (NODE) = (NEXT)) - -/* Continues an iteration from just after NODE. */ -#define HMAP_FOR_EACH_CONTINUE(NODE, MEMBER, HMAP) \ - HMAP_FOR_EACH_CONTINUE_INIT(NODE, MEMBER, HMAP, (void) 0) -#define HMAP_FOR_EACH_CONTINUE_INIT(NODE, MEMBER, HMAP, ...) \ - for (ASSIGN_CONTAINER(NODE, hmap_next(HMAP, &(NODE)->MEMBER), MEMBER), \ - __VA_ARGS__; \ - (NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL); \ - ASSIGN_CONTAINER(NODE, hmap_next(HMAP, &(NODE)->MEMBER), MEMBER)) - -static inline struct hmap_node * -hmap_pop_helper__(struct hmap *hmap, size_t *bucket) { - - for (; *bucket <= hmap->mask; (*bucket)++) { - struct hmap_node *node = hmap->buckets[*bucket]; - - if (node) { - hmap_remove(hmap, node); - return node; - } - } - - return NULL; -} - -#define HMAP_FOR_EACH_POP(NODE, MEMBER, HMAP) \ - for (size_t bucket__ = 0; \ - INIT_CONTAINER(NODE, hmap_pop_helper__(HMAP, &bucket__), MEMBER), \ - (NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER)) || (NODE = NULL);) - -static inline struct hmap_node *hmap_first(const struct hmap *); -static inline struct hmap_node *hmap_next(const struct hmap *, - const struct hmap_node *); - -struct hmap_position { - unsigned int bucket; - unsigned int offset; -}; - -struct hmap_node *hmap_at_position(const struct hmap *, - struct hmap_position *); - -/* Returns the number of nodes currently in 'hmap'. */ -static inline size_t -hmap_count(const struct hmap *hmap) -{ - return hmap->n; -} - -/* Returns the maximum number of nodes that 'hmap' may hold before it should be - * rehashed. */ -static inline size_t -hmap_capacity(const struct hmap *hmap) -{ - return hmap->mask * 2 + 1; -} - -/* Returns true if 'hmap' currently contains no nodes, - * false otherwise. - * Note: While hmap in general is not thread-safe without additional locking, - * hmap_is_empty() is. */ -static inline bool -hmap_is_empty(const struct hmap *hmap) -{ - return hmap->n == 0; -} - -/* Inserts 'node', with the given 'hash', into 'hmap'. 'hmap' is never - * expanded automatically. */ -static inline void -hmap_insert_fast(struct hmap *hmap, struct hmap_node *node, size_t hash) -{ - struct hmap_node **bucket = &hmap->buckets[hash & hmap->mask]; - node->hash = hash; - node->next = *bucket; - *bucket = node; - hmap->n++; -} - -/* Inserts 'node', with the given 'hash', into 'hmap', and expands 'hmap' if - * necessary to optimize search performance. - * - * ('where' is used in debug logging. Commonly one would use hmap_insert() to - * automatically provide the caller's source file and line number for - * 'where'.) */ -static inline void -hmap_insert_at(struct hmap *hmap, struct hmap_node *node, size_t hash, - const char *where) -{ - hmap_insert_fast(hmap, node, hash); - if (hmap->n / 2 > hmap->mask) { - hmap_expand_at(hmap, where); - } -} - -/* Removes 'node' from 'hmap'. Does not shrink the hash table; call - * hmap_shrink() directly if desired. */ -static inline void -hmap_remove(struct hmap *hmap, struct hmap_node *node) -{ - struct hmap_node **bucket = &hmap->buckets[node->hash & hmap->mask]; - while (*bucket != node) { - bucket = &(*bucket)->next; - } - *bucket = node->next; - hmap->n--; -} - -/* Puts 'new_node' in the position in 'hmap' currently occupied by 'old_node'. - * The 'new_node' must hash to the same value as 'old_node'. The client is - * responsible for ensuring that the replacement does not violate any - * client-imposed invariants (e.g. uniqueness of keys within a map). - * - * Afterward, 'old_node' is not part of 'hmap', and the client is responsible - * for freeing it (if this is desirable). */ -static inline void -hmap_replace(struct hmap *hmap, - const struct hmap_node *old_node, struct hmap_node *new_node) -{ - struct hmap_node **bucket = &hmap->buckets[old_node->hash & hmap->mask]; - while (*bucket != old_node) { - bucket = &(*bucket)->next; - } - *bucket = new_node; - new_node->hash = old_node->hash; - new_node->next = old_node->next; -} - -static inline struct hmap_node * -hmap_next_with_hash__(const struct hmap_node *node, size_t hash) -{ - while (node != NULL && node->hash != hash) { - node = node->next; - } - return CONST_CAST(struct hmap_node *, node); -} - -/* Returns the first node in 'hmap' with the given 'hash', or a null pointer if - * no nodes have that hash value. */ -static inline struct hmap_node * -hmap_first_with_hash(const struct hmap *hmap, size_t hash) -{ - return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash); -} - -/* Returns the first node in 'hmap' in the bucket in which the given 'hash' - * would land, or a null pointer if that bucket is empty. */ -static inline struct hmap_node * -hmap_first_in_bucket(const struct hmap *hmap, size_t hash) -{ - return hmap->buckets[hash & hmap->mask]; -} - -/* Returns the next node in the same bucket as 'node', or a null pointer if - * there are no more nodes in that bucket. - * - * If the hash map has been reallocated since 'node' was visited, some nodes - * may be skipped; if new nodes with the same hash value have been added, they - * will be skipped. (Removing 'node' from the hash map does not prevent - * calling this function, since node->next is preserved, although freeing - * 'node' of course does.) */ -static inline struct hmap_node * -hmap_next_in_bucket(const struct hmap_node *node) -{ - return node->next; -} - -/* Returns the next node in the same hash map as 'node' with the same hash - * value, or a null pointer if no more nodes have that hash value. - * - * If the hash map has been reallocated since 'node' was visited, some nodes - * may be skipped; if new nodes with the same hash value have been added, they - * will be skipped. (Removing 'node' from the hash map does not prevent - * calling this function, since node->next is preserved, although freeing - * 'node' of course does.) */ -static inline struct hmap_node * -hmap_next_with_hash(const struct hmap_node *node) -{ - return hmap_next_with_hash__(node->next, node->hash); -} - -static inline struct hmap_node * -hmap_next__(const struct hmap *hmap, size_t start) -{ - size_t i; - for (i = start; i <= hmap->mask; i++) { - struct hmap_node *node = hmap->buckets[i]; - if (node) { - return node; - } - } - return NULL; -} - -/* Returns the first node in 'hmap', in arbitrary order, or a null pointer if - * 'hmap' is empty. */ -static inline struct hmap_node * -hmap_first(const struct hmap *hmap) -{ - return hmap_next__(hmap, 0); -} - -/* Returns the next node in 'hmap' following 'node', in arbitrary order, or a - * null pointer if 'node' is the last node in 'hmap'. - * - * If the hash map has been reallocated since 'node' was visited, some nodes - * may be skipped or visited twice. (Removing 'node' from the hash map does - * not prevent calling this function, since node->next is preserved, although - * freeing 'node' of course does.) */ -static inline struct hmap_node * -hmap_next(const struct hmap *hmap, const struct hmap_node *node) -{ - return (node->next - ? node->next - : hmap_next__(hmap, (node->hash & hmap->mask) + 1)); -} - -#ifdef __cplusplus -} -#endif - -#endif /* hmap.h */ diff --git a/lib/hmapx.h b/lib/hmapx.h index f977d9e..06a6bbe 100644 --- a/lib/hmapx.h +++ b/lib/hmapx.h @@ -17,7 +17,7 @@ #ifndef HMAPX_H #define HMAPX_H -#include "hmap.h" +#include "openvswitch/hmap.h" struct hmapx_node { struct hmap_node hmap_node; diff --git a/lib/id-pool.c b/lib/id-pool.c index f32c008..62a6b33 100644 --- a/lib/id-pool.c +++ b/lib/id-pool.c @@ -17,7 +17,7 @@ #include #include "id-pool.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "hash.h" struct id_node { diff --git a/lib/json.c b/lib/json.c index 4ac250b..995f3c2 100644 --- a/lib/json.c +++ b/lib/json.c @@ -16,7 +16,7 @@ #include -#include "json.h" +#include "openvswitch/json.h" #include #include @@ -26,7 +26,7 @@ #include "openvswitch/dynamic-string.h" #include "hash.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "unicode.h" #include "util.h" diff --git a/lib/json.h b/lib/json.h deleted file mode 100644 index 3497035..0000000 --- a/lib/json.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2009, 2010, 2015 Nicira, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JSON_H -#define JSON_H 1 - -/* This is an implementation of JavaScript Object Notation (JSON) as specified - * by RFC 4627. It is intended to fully comply with RFC 4627, with the - * following known exceptions and clarifications: - * - * - Null bytes (\u0000) are not allowed in strings. - * - * - Only UTF-8 encoding is supported (RFC 4627 allows for other Unicode - * encodings). - * - * - Names within an object must be unique (RFC 4627 says that they - * "should" be unique). - */ - -#include "shash.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct ds; - -/* Type of a JSON value. */ -enum json_type { - JSON_NULL, /* null */ - JSON_FALSE, /* false */ - JSON_TRUE, /* true */ - JSON_OBJECT, /* {"a": b, "c": d, ...} */ - JSON_ARRAY, /* [1, 2, 3, ...] */ - JSON_INTEGER, /* 123. */ - JSON_REAL, /* 123.456. */ - JSON_STRING, /* "..." */ - JSON_N_TYPES -}; - -const char *json_type_to_string(enum json_type); - -/* A JSON array. */ -struct json_array { - size_t n, n_allocated; - struct json **elems; -}; - -/* A JSON value. */ -struct json { - enum json_type type; - union { - struct shash *object; /* Contains "struct json *"s. */ - struct json_array array; - long long int integer; - double real; - char *string; - } u; -}; - -struct json *json_null_create(void); -struct json *json_boolean_create(bool); -struct json *json_string_create(const char *); -struct json *json_string_create_nocopy(char *); -struct json *json_integer_create(long long int); -struct json *json_real_create(double); - -struct json *json_array_create_empty(void); -void json_array_add(struct json *, struct json *element); -void json_array_trim(struct json *); -struct json *json_array_create(struct json **, size_t n); -struct json *json_array_create_1(struct json *); -struct json *json_array_create_2(struct json *, struct json *); -struct json *json_array_create_3(struct json *, struct json *, struct json *); - -struct json *json_object_create(void); -void json_object_put(struct json *, const char *name, struct json *value); -void json_object_put_string(struct json *, - const char *name, const char *value); - -const char *json_string(const struct json *); -struct json_array *json_array(const struct json *); -struct shash *json_object(const struct json *); -bool json_boolean(const struct json *); -double json_real(const struct json *); -int64_t json_integer(const struct json *); - -struct json *json_clone(const struct json *); -void json_destroy(struct json *); - -size_t json_hash(const struct json *, size_t basis); -bool json_equal(const struct json *, const struct json *); - -/* Parsing JSON. */ -enum { - JSPF_TRAILER = 1 << 0 /* Check for garbage following input. */ -}; - -struct json_parser *json_parser_create(int flags); -size_t json_parser_feed(struct json_parser *, const char *, size_t); -bool json_parser_is_done(const struct json_parser *); -struct json *json_parser_finish(struct json_parser *); -void json_parser_abort(struct json_parser *); - -struct json *json_from_string(const char *string); -struct json *json_from_file(const char *file_name); -struct json *json_from_stream(FILE *stream); - -/* Serializing JSON. */ - -enum { - JSSF_PRETTY = 1 << 0, /* Multiple lines with indentation, if true. */ - JSSF_SORT = 1 << 1 /* Object members in sorted order, if true. */ -}; -char *json_to_string(const struct json *, int flags); -void json_to_ds(const struct json *, int flags, struct ds *); - -/* JSON string formatting operations. */ - -bool json_string_unescape(const char *in, size_t in_len, char **outp); -void json_string_escape(const char *in, struct ds *out); - -#ifdef __cplusplus -} -#endif - -#endif /* json.h */ diff --git a/lib/jsonrpc.c b/lib/jsonrpc.c index aba742c..1841568 100644 --- a/lib/jsonrpc.c +++ b/lib/jsonrpc.c @@ -23,7 +23,7 @@ #include "byteq.h" #include "openvswitch/dynamic-string.h" #include "fatal-signal.h" -#include "json.h" +#include "openvswitch/json.h" #include "openvswitch/list.h" #include "openvswitch/ofpbuf.h" #include "ovs-thread.h" diff --git a/lib/lacp.c b/lib/lacp.c index a9d6e1e..ad6ef8e 100644 --- a/lib/lacp.c +++ b/lib/lacp.c @@ -21,17 +21,18 @@ #include "connectivity.h" #include "openvswitch/dynamic-string.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "dp-packet.h" #include "ovs-atomic.h" #include "packets.h" #include "poll-loop.h" #include "seq.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "timer.h" #include "timeval.h" #include "unixctl.h" #include "openvswitch/vlog.h" +#include "util.h" VLOG_DEFINE_THIS_MODULE(lacp); diff --git a/lib/learning-switch.c b/lib/learning-switch.c index b420fe5..82609e8 100644 --- a/lib/learning-switch.c +++ b/lib/learning-switch.c @@ -27,7 +27,7 @@ #include "classifier.h" #include "dp-packet.h" #include "flow.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "mac-learning.h" #include "openflow/openflow.h" #include "openvswitch/ofp-actions.h" @@ -41,7 +41,7 @@ #include "openvswitch/vlog.h" #include "poll-loop.h" #include "rconn.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "simap.h" #include "timeval.h" diff --git a/lib/lockfile.c b/lib/lockfile.c index 864d3ef..36728ff 100644 --- a/lib/lockfile.c +++ b/lib/lockfile.c @@ -26,7 +26,7 @@ #include "coverage.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "ovs-thread.h" #include "timeval.h" #include "util.h" diff --git a/lib/mac-learning.h b/lib/mac-learning.h index 0b62d09..d09e895 100644 --- a/lib/mac-learning.h +++ b/lib/mac-learning.h @@ -19,7 +19,7 @@ #include #include "heap.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" #include "ovs-atomic.h" #include "ovs-thread.h" diff --git a/lib/mcast-snooping.h b/lib/mcast-snooping.h index 84b9c57..af7fb93 100644 --- a/lib/mcast-snooping.h +++ b/lib/mcast-snooping.h @@ -21,7 +21,7 @@ #include #include "dp-packet.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" #include "ovs-atomic.h" #include "ovs-thread.h" diff --git a/lib/meta-flow.c b/lib/meta-flow.c index e160de1..8e1447d 100644 --- a/lib/meta-flow.c +++ b/lib/meta-flow.c @@ -30,7 +30,7 @@ #include "ovs-thread.h" #include "packets.h" #include "random.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "socket-util.h" #include "tun-metadata.h" #include "unaligned.h" diff --git a/lib/multipath.c b/lib/multipath.c index 30bab14..8a1d1fa 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -29,6 +29,7 @@ #include "openvswitch/ofp-errors.h" #include "openvswitch/ofp-util.h" #include "packets.h" +#include "util.h" /* Checks that 'mp' is valid on flow. Returns 0 if it is valid, otherwise an * OFPERR_*. */ diff --git a/lib/netdev-bsd.c b/lib/netdev-bsd.c index 2e92d97..fdce241 100644 --- a/lib/netdev-bsd.c +++ b/lib/netdev-bsd.c @@ -57,7 +57,7 @@ #include "ovs-thread.h" #include "packets.h" #include "poll-loop.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "socket-util.h" #include "svec.h" #include "util.h" diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 85b18fd..c712991 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -48,7 +48,7 @@ #include "ovs-thread.h" #include "ovs-rcu.h" #include "packets.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "smap.h" #include "sset.h" #include "unaligned.h" diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index 9ea765b..a370f84 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -36,7 +36,7 @@ #include "packets.h" #include "pcap-file.h" #include "poll-loop.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "sset.h" #include "stream.h" #include "unaligned.h" diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 486910a..eefd0b5 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -55,7 +55,7 @@ #include "openvswitch/dynamic-string.h" #include "fatal-signal.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "netdev-provider.h" #include "netdev-vport.h" #include "netlink-notifier.h" @@ -67,12 +67,13 @@ #include "packets.h" #include "poll-loop.h" #include "rtnetlink.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "socket-util.h" #include "sset.h" #include "timer.h" #include "unaligned.h" #include "openvswitch/vlog.h" +#include "util.h" VLOG_DEFINE_THIS_MODULE(netdev_linux); diff --git a/lib/netdev-provider.h b/lib/netdev-provider.h index 5da377f..95449bb 100644 --- a/lib/netdev-provider.h +++ b/lib/netdev-provider.h @@ -25,7 +25,7 @@ #include "ovs-numa.h" #include "packets.h" #include "seq.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "smap.h" #ifdef __cplusplus diff --git a/lib/netdev-windows.c b/lib/netdev-windows.c index c21ffe7..3218490 100644 --- a/lib/netdev-windows.c +++ b/lib/netdev-windows.c @@ -27,7 +27,7 @@ #include "openvswitch/ofpbuf.h" #include "packets.h" #include "poll-loop.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "svec.h" #include "openvswitch/vlog.h" #include "odp-netlink.h" diff --git a/lib/netdev.c b/lib/netdev.c index 6651173..37c9998 100644 --- a/lib/netdev.c +++ b/lib/netdev.c @@ -47,7 +47,7 @@ #include "packets.h" #include "poll-loop.h" #include "seq.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "smap.h" #include "sset.h" #include "svec.h" diff --git a/lib/netlink-conntrack.h b/lib/netlink-conntrack.h index f75259c..1263b21 100644 --- a/lib/netlink-conntrack.h +++ b/lib/netlink-conntrack.h @@ -21,7 +21,7 @@ #include "compiler.h" #include "ct-dpif.h" #include "openvswitch/dynamic-string.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/ofpbuf.h" #include "timeval.h" #include "unixctl.h" diff --git a/lib/netlink-socket.c b/lib/netlink-socket.c index 32b0cc3..25bad38 100644 --- a/lib/netlink-socket.c +++ b/lib/netlink-socket.c @@ -25,7 +25,7 @@ #include "coverage.h" #include "openvswitch/dynamic-string.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "netlink.h" #include "netlink-protocol.h" #include "odp-netlink.h" diff --git a/lib/netlink.c b/lib/netlink.c index fbdb78e..4715d68 100644 --- a/lib/netlink.c +++ b/lib/netlink.c @@ -27,6 +27,7 @@ #include "timeval.h" #include "unaligned.h" #include "openvswitch/vlog.h" +#include "util.h" VLOG_DEFINE_THIS_MODULE(netlink); diff --git a/lib/nx-match.c b/lib/nx-match.c index 9a2ada9..2715626 100644 --- a/lib/nx-match.c +++ b/lib/nx-match.c @@ -22,7 +22,7 @@ #include "classifier.h" #include "colors.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openflow/nicira-ext.h" #include "openvswitch/dynamic-string.h" #include "openvswitch/meta-flow.h" @@ -32,7 +32,7 @@ #include "openvswitch/ofpbuf.h" #include "openvswitch/vlog.h" #include "packets.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "tun-metadata.h" #include "unaligned.h" #include "util.h" diff --git a/lib/odp-util.h b/lib/odp-util.h index 53ee661..51a4c02 100644 --- a/lib/odp-util.h +++ b/lib/odp-util.h @@ -23,7 +23,7 @@ #include #include "flow.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "odp-netlink.h" #include "openflow/openflow.h" #include "util.h" diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c index 997cc15..59c9bc1 100644 --- a/lib/ofp-actions.c +++ b/lib/ofp-actions.c @@ -22,7 +22,7 @@ #include "colors.h" #include "compiler.h" #include "dummy.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "learn.h" #include "multipath.h" #include "nx-match.h" diff --git a/lib/ofp-msgs.c b/lib/ofp-msgs.c index 8154539..f9660fc 100644 --- a/lib/ofp-msgs.c +++ b/lib/ofp-msgs.c @@ -17,7 +17,7 @@ #include #include "byte-order.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openflow/nicira-ext.h" #include "openflow/openflow.h" #include "openvswitch/dynamic-string.h" @@ -25,6 +25,7 @@ #include "openvswitch/ofpbuf.h" #include "openvswitch/vlog.h" #include "ovs-thread.h" +#include "util.h" VLOG_DEFINE_THIS_MODULE(ofp_msgs); diff --git a/lib/ofp-parse.c b/lib/ofp-parse.c index 4af6d9b..370e3e5 100644 --- a/lib/ofp-parse.c +++ b/lib/ofp-parse.c @@ -38,6 +38,7 @@ #include "packets.h" #include "simap.h" #include "socket-util.h" +#include "util.h" /* Parses 'str' as an 8-bit unsigned integer into '*valuep'. * diff --git a/lib/ofp-util.c b/lib/ofp-util.c index 2b214ea..33f6ff8 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -49,6 +49,7 @@ #include "random.h" #include "tun-metadata.h" #include "unaligned.h" +#include "util.h" #include "uuid.h" VLOG_DEFINE_THIS_MODULE(ofp_util); diff --git a/lib/ovs-lldp.h b/lib/ovs-lldp.h index b5c3a48..0e536e8 100644 --- a/lib/ovs-lldp.h +++ b/lib/ovs-lldp.h @@ -21,7 +21,7 @@ #include #include "dp-packet.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" #include "lldp/lldpd.h" #include "ovs-atomic.h" diff --git a/lib/ovs-numa.c b/lib/ovs-numa.c index 7652636..c8173e0 100644 --- a/lib/ovs-numa.c +++ b/lib/ovs-numa.c @@ -28,7 +28,7 @@ #endif /* __linux__ */ #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" #include "ovs-thread.h" #include "openvswitch/vlog.h" diff --git a/lib/ovs-rcu.c b/lib/ovs-rcu.c index 8aef1f1..0614d98 100644 --- a/lib/ovs-rcu.c +++ b/lib/ovs-rcu.c @@ -24,6 +24,7 @@ #include "poll-loop.h" #include "seq.h" #include "timeval.h" +#include "util.h" #include "openvswitch/vlog.h" VLOG_DEFINE_THIS_MODULE(ovs_rcu); diff --git a/lib/ovsdb-data.c b/lib/ovsdb-data.c index 22176cd..266a3e4 100644 --- a/lib/ovsdb-data.c +++ b/lib/ovsdb-data.c @@ -27,11 +27,12 @@ #include "ovs-thread.h" #include "ovsdb-error.h" #include "ovsdb-parser.h" -#include "json.h" -#include "shash.h" +#include "openvswitch/json.h" +#include "openvswitch/shash.h" #include "smap.h" #include "sort.h" #include "unicode.h" +#include "util.h" static struct json * wrap_json(const char *name, struct json *wrapped) diff --git a/lib/ovsdb-data.h b/lib/ovsdb-data.h index 2789540..98633ef 100644 --- a/lib/ovsdb-data.h +++ b/lib/ovsdb-data.h @@ -19,7 +19,7 @@ #include #include "compiler.h" #include "ovsdb-types.h" -#include "shash.h" +#include "openvswitch/shash.h" struct ds; struct ovsdb_symbol_table; diff --git a/lib/ovsdb-error.c b/lib/ovsdb-error.c index dbe8149..dfa4249 100644 --- a/lib/ovsdb-error.c +++ b/lib/ovsdb-error.c @@ -21,7 +21,7 @@ #include "backtrace.h" #include "openvswitch/dynamic-string.h" -#include "json.h" +#include "openvswitch/json.h" #include "util.h" #include "openvswitch/vlog.h" diff --git a/lib/ovsdb-idl-provider.h b/lib/ovsdb-idl-provider.h index 04cf419..075adbb 100644 --- a/lib/ovsdb-idl-provider.h +++ b/lib/ovsdb-idl-provider.h @@ -16,12 +16,12 @@ #ifndef OVSDB_IDL_PROVIDER_H #define OVSDB_IDL_PROVIDER_H 1 -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" #include "ovsdb-idl.h" #include "ovsdb-map-op.h" #include "ovsdb-types.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "uuid.h" struct ovsdb_idl_row { diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c index 9b3e933..a47a091 100644 --- a/lib/ovsdb-idl.c +++ b/lib/ovsdb-idl.c @@ -26,7 +26,7 @@ #include "coverage.h" #include "openvswitch/dynamic-string.h" #include "fatal-signal.h" -#include "json.h" +#include "openvswitch/json.h" #include "jsonrpc.h" #include "ovsdb/ovsdb.h" #include "ovsdb/table.h" @@ -35,7 +35,7 @@ #include "ovsdb-idl-provider.h" #include "ovsdb-parser.h" #include "poll-loop.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "sset.h" #include "util.h" #include "openvswitch/vlog.h" diff --git a/lib/ovsdb-map-op.c b/lib/ovsdb-map-op.c index 23fc5f5..7b90ba8 100644 --- a/lib/ovsdb-map-op.c +++ b/lib/ovsdb-map-op.c @@ -17,7 +17,7 @@ #include #include "ovsdb-map-op.h" #include "util.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "hash.h" /* Map Operation: a Partial Map Update */ diff --git a/lib/ovsdb-parser.h b/lib/ovsdb-parser.h index 2f9f483..31c5a60 100644 --- a/lib/ovsdb-parser.h +++ b/lib/ovsdb-parser.h @@ -18,7 +18,7 @@ #include #include "compiler.h" -#include "json.h" +#include "openvswitch/json.h" #include "sset.h" #include "util.h" diff --git a/lib/ovsdb-types.c b/lib/ovsdb-types.c index 91d5216..20a8444 100644 --- a/lib/ovsdb-types.c +++ b/lib/ovsdb-types.c @@ -21,11 +21,12 @@ #include #include "openvswitch/dynamic-string.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovs-thread.h" #include "ovsdb-data.h" #include "ovsdb-error.h" #include "ovsdb-parser.h" +#include "util.h" const struct ovsdb_type ovsdb_type_integer = OVSDB_TYPE_SCALAR_INITIALIZER(OVSDB_BASE_INTEGER_INIT); diff --git a/lib/packets.c b/lib/packets.c index a27264c..f9efc05 100644 --- a/lib/packets.c +++ b/lib/packets.c @@ -26,7 +26,7 @@ #include "csum.h" #include "crc32c.h" #include "flow.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/dynamic-string.h" #include "ovs-thread.h" #include "odp-util.h" diff --git a/lib/pcap-file.c b/lib/pcap-file.c index a850d21..dd4d229 100644 --- a/lib/pcap-file.c +++ b/lib/pcap-file.c @@ -25,10 +25,11 @@ #include "compiler.h" #include "dp-packet.h" #include "flow.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "packets.h" #include "timeval.h" #include "unaligned.h" +#include "util.h" #include "openvswitch/vlog.h" VLOG_DEFINE_THIS_MODULE(pcap); diff --git a/lib/perf-counter.c b/lib/perf-counter.c index c5144e7..da60df7 100644 --- a/lib/perf-counter.c +++ b/lib/perf-counter.c @@ -28,7 +28,7 @@ #include #include "openvswitch/dynamic-string.h" #include "perf-counter.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "util.h" static struct shash perf_counters = SHASH_INITIALIZER(&perf_counters); diff --git a/lib/poll-loop.c b/lib/poll-loop.c index 925198f..4f32189 100644 --- a/lib/poll-loop.c +++ b/lib/poll-loop.c @@ -30,7 +30,7 @@ #include "socket-util.h" #include "timeval.h" #include "openvswitch/vlog.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "hash.h" VLOG_DEFINE_THIS_MODULE(poll_loop); diff --git a/lib/reconnect.c b/lib/reconnect.c index bab821e..471fb7f 100644 --- a/lib/reconnect.c +++ b/lib/reconnect.c @@ -20,6 +20,7 @@ #include #include "poll-loop.h" +#include "util.h" #include "openvswitch/vlog.h" VLOG_DEFINE_THIS_MODULE(reconnect); diff --git a/lib/rstp-common.h b/lib/rstp-common.h index 6d5acfc..27e8079 100644 --- a/lib/rstp-common.h +++ b/lib/rstp-common.h @@ -33,7 +33,7 @@ #include "rstp.h" #include #include -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" #include "ovs-atomic.h" #include "packets.h" diff --git a/lib/seq.c b/lib/seq.c index b8b5b65..6e2f596 100644 --- a/lib/seq.c +++ b/lib/seq.c @@ -22,7 +22,7 @@ #include "coverage.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "latch.h" #include "openvswitch/list.h" #include "ovs-thread.h" diff --git a/lib/shash.c b/lib/shash.c index 4285c07..3e94b17 100644 --- a/lib/shash.c +++ b/lib/shash.c @@ -15,7 +15,7 @@ */ #include -#include "shash.h" +#include "openvswitch/shash.h" #include "hash.h" static struct shash_node *shash_find__(const struct shash *, diff --git a/lib/shash.h b/lib/shash.h deleted file mode 100644 index 5f94725..0000000 --- a/lib/shash.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2009, 2010, 2011, 2016 Nicira, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef SHASH_H -#define SHASH_H 1 - -#include "hmap.h" -#include "util.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct shash_node { - struct hmap_node node; - char *name; - void *data; -}; - -struct shash { - struct hmap map; -}; - -#define SHASH_INITIALIZER(SHASH) { HMAP_INITIALIZER(&(SHASH)->map) } - -#define SHASH_FOR_EACH(SHASH_NODE, SHASH) \ - HMAP_FOR_EACH_INIT (SHASH_NODE, node, &(SHASH)->map, \ - BUILD_ASSERT_TYPE(SHASH_NODE, struct shash_node *), \ - BUILD_ASSERT_TYPE(SHASH, struct shash *)) - -#define SHASH_FOR_EACH_SAFE(SHASH_NODE, NEXT, SHASH) \ - HMAP_FOR_EACH_SAFE_INIT ( \ - SHASH_NODE, NEXT, node, &(SHASH)->map, \ - BUILD_ASSERT_TYPE(SHASH_NODE, struct shash_node *), \ - BUILD_ASSERT_TYPE(NEXT, struct shash_node *), \ - BUILD_ASSERT_TYPE(SHASH, struct shash *)) - -void shash_init(struct shash *); -void shash_destroy(struct shash *); -void shash_destroy_free_data(struct shash *); -void shash_swap(struct shash *, struct shash *); -void shash_moved(struct shash *); -void shash_clear(struct shash *); -void shash_clear_free_data(struct shash *); -bool shash_is_empty(const struct shash *); -size_t shash_count(const struct shash *); -struct shash_node *shash_add(struct shash *, const char *, const void *); -struct shash_node *shash_add_nocopy(struct shash *, char *, const void *); -bool shash_add_once(struct shash *, const char *, const void *); -void shash_add_assert(struct shash *, const char *, const void *); -void *shash_replace(struct shash *, const char *, const void *data); -void shash_delete(struct shash *, struct shash_node *); -char *shash_steal(struct shash *, struct shash_node *); -struct shash_node *shash_find(const struct shash *, const char *); -struct shash_node *shash_find_len(const struct shash *, const char *, size_t); -void *shash_find_data(const struct shash *, const char *); -void *shash_find_and_delete(struct shash *, const char *); -void *shash_find_and_delete_assert(struct shash *, const char *); -struct shash_node *shash_first(const struct shash *); -const struct shash_node **shash_sort(const struct shash *); -bool shash_equal_keys(const struct shash *, const struct shash *); -struct shash_node *shash_random_node(struct shash *); - -#ifdef __cplusplus -} -#endif - -#endif /* shash.h */ diff --git a/lib/simap.h b/lib/simap.h index 113db93..9486080 100644 --- a/lib/simap.h +++ b/lib/simap.h @@ -17,7 +17,7 @@ #ifndef SIMAP_H #define SIMAP_H 1 -#include "hmap.h" +#include "openvswitch/hmap.h" #ifdef __cplusplus extern "C" { diff --git a/lib/smap.c b/lib/smap.c index 07dd23a..aff7eb0 100644 --- a/lib/smap.c +++ b/lib/smap.c @@ -18,7 +18,7 @@ #include #include "hash.h" -#include "json.h" +#include "openvswitch/json.h" #include "packets.h" #include "uuid.h" diff --git a/lib/smap.h b/lib/smap.h index 038b769..29f99e6 100644 --- a/lib/smap.h +++ b/lib/smap.h @@ -17,7 +17,7 @@ #include #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" struct json; struct uuid; diff --git a/lib/sset.h b/lib/sset.h index 9c2f703..aa57521 100644 --- a/lib/sset.h +++ b/lib/sset.h @@ -17,7 +17,7 @@ #ifndef SSET_H #define SSET_H -#include "hmap.h" +#include "openvswitch/hmap.h" #include "util.h" #ifdef __cplusplus diff --git a/lib/stream-ssl.c b/lib/stream-ssl.c index bf80fc8..a5c32a1 100644 --- a/lib/stream-ssl.c +++ b/lib/stream-ssl.c @@ -39,7 +39,7 @@ #include "openflow/openflow.h" #include "packets.h" #include "poll-loop.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "socket-util.h" #include "util.h" #include "stream-provider.h" diff --git a/lib/table.c b/lib/table.c index a2cfe3d..9158499 100644 --- a/lib/table.c +++ b/lib/table.c @@ -19,7 +19,7 @@ #include "table.h" #include "openvswitch/dynamic-string.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovsdb-data.h" #include "ovsdb-error.h" #include "timeval.h" diff --git a/lib/timeval.c b/lib/timeval.c index 8e5f971..0e8709a 100644 --- a/lib/timeval.c +++ b/lib/timeval.c @@ -30,7 +30,7 @@ #include "openvswitch/dynamic-string.h" #include "fatal-signal.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "ovs-rcu.h" #include "ovs-thread.h" #include "signals.h" diff --git a/lib/tun-metadata.c b/lib/tun-metadata.c index 7a2a84f..36006e3 100644 --- a/lib/tun-metadata.c +++ b/lib/tun-metadata.c @@ -20,7 +20,7 @@ #include "bitmap.h" #include "compiler.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/match.h" #include "nx-match.h" #include "odp-netlink.h" @@ -29,6 +29,7 @@ #include "ovs-rcu.h" #include "packets.h" #include "tun-metadata.h" +#include "util.h" struct tun_meta_entry { struct hmap_node node; /* In struct tun_table's key_hmap. */ diff --git a/lib/unixctl.c b/lib/unixctl.c index 935c145..5e5d26c 100644 --- a/lib/unixctl.c +++ b/lib/unixctl.c @@ -21,11 +21,11 @@ #include "coverage.h" #include "dirs.h" #include "openvswitch/dynamic-string.h" -#include "json.h" +#include "openvswitch/json.h" #include "jsonrpc.h" #include "openvswitch/list.h" #include "poll-loop.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "stream.h" #include "stream-provider.h" #include "svec.h" diff --git a/lib/util.h b/lib/util.h index e738c9f..5049d15 100644 --- a/lib/util.h +++ b/lib/util.h @@ -25,6 +25,7 @@ #include #include #include "compiler.h" +#include "util.h" #include "openvswitch/util.h" extern char *program_name; diff --git a/ofproto/bond.c b/ofproto/bond.c index 032b8f6..1d0c3ce 100644 --- a/ofproto/bond.c +++ b/ofproto/bond.c @@ -27,7 +27,7 @@ #include "coverage.h" #include "dp-packet.h" #include "flow.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "lacp.h" #include "netdev.h" #include "odp-util.h" @@ -44,9 +44,10 @@ #include "packets.h" #include "poll-loop.h" #include "seq.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "timeval.h" #include "unixctl.h" +#include "util.h" VLOG_DEFINE_THIS_MODULE(bond); diff --git a/ofproto/bundles.c b/ofproto/bundles.c index 232cc15..aa8e58c 100644 --- a/ofproto/bundles.c +++ b/ofproto/bundles.c @@ -34,7 +34,7 @@ #include "poll-loop.h" #include "pktbuf.h" #include "rconn.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "simap.h" #include "stream.h" #include "timeval.h" diff --git a/ofproto/connmgr.c b/ofproto/connmgr.c index 0c48b77..d70d990 100644 --- a/ofproto/connmgr.c +++ b/ofproto/connmgr.c @@ -36,10 +36,11 @@ #include "poll-loop.h" #include "pktbuf.h" #include "rconn.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "simap.h" #include "stream.h" #include "timeval.h" +#include "util.h" VLOG_DEFINE_THIS_MODULE(connmgr); static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5); diff --git a/ofproto/connmgr.h b/ofproto/connmgr.h index 30e7ae5..be4ce28 100644 --- a/ofproto/connmgr.h +++ b/ofproto/connmgr.h @@ -18,7 +18,7 @@ #define CONNMGR_H 1 #include "classifier.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" #include "openvswitch/match.h" #include "openvswitch/ofp-util.h" diff --git a/ofproto/ofproto-dpif-ipfix.c b/ofproto/ofproto-dpif-ipfix.c index 5744abb..0128c91 100644 --- a/ofproto/ofproto-dpif-ipfix.c +++ b/ofproto/ofproto-dpif-ipfix.c @@ -21,7 +21,7 @@ #include "collectors.h" #include "flow.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "netdev.h" #include "openvswitch/list.h" #include "openvswitch/ofpbuf.h" diff --git a/ofproto/ofproto-dpif-mirror.c b/ofproto/ofproto-dpif-mirror.c index 84b7845..675adf3 100644 --- a/ofproto/ofproto-dpif-mirror.c +++ b/ofproto/ofproto-dpif-mirror.c @@ -18,7 +18,7 @@ #include -#include "hmap.h" +#include "openvswitch/hmap.h" #include "hmapx.h" #include "ofproto.h" #include "vlan-bitmap.h" diff --git a/ofproto/ofproto-dpif-monitor.c b/ofproto/ofproto-dpif-monitor.c index 11d7a54..623d517 100644 --- a/ofproto/ofproto-dpif-monitor.c +++ b/ofproto/ofproto-dpif-monitor.c @@ -25,7 +25,7 @@ #include "guarded-list.h" #include "hash.h" #include "heap.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "latch.h" #include "openvswitch/ofpbuf.h" #include "ofproto-dpif.h" diff --git a/ofproto/ofproto-dpif-sflow.c b/ofproto/ofproto-dpif-sflow.c index 7d0aa36..8a19d15 100644 --- a/ofproto/ofproto-dpif-sflow.c +++ b/ofproto/ofproto-dpif-sflow.c @@ -26,7 +26,7 @@ #include "compiler.h" #include "dpif.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "netdev.h" #include "netlink.h" #include "openvswitch/ofpbuf.h" diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index 1977b6b..fec7544 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -59,6 +59,7 @@ #include "tnl-neigh-cache.h" #include "tnl-ports.h" #include "tunnel.h" +#include "util.h" COVERAGE_DEFINE(xlate_actions); COVERAGE_DEFINE(xlate_actions_oversize); diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index ce9383a..faff1c7 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -68,6 +68,7 @@ #include "tunnel.h" #include "unaligned.h" #include "unixctl.h" +#include "util.h" #include "vlan-bitmap.h" VLOG_DEFINE_THIS_MODULE(ofproto_dpif); diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h index ae6c08d..25f8dc0 100644 --- a/ofproto/ofproto-provider.h +++ b/ofproto/ofproto-provider.h @@ -46,7 +46,7 @@ #include "ovs-atomic.h" #include "ovs-rcu.h" #include "ovs-thread.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "simap.h" #include "timeval.h" diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 5f84aa1..dcb0a08 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -31,7 +31,7 @@ #include "coverage.h" #include "dp-packet.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "netdev.h" #include "nx-match.h" #include "ofproto.h" @@ -54,7 +54,7 @@ #include "poll-loop.h" #include "random.h" #include "seq.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "simap.h" #include "smap.h" #include "sset.h" @@ -62,6 +62,7 @@ #include "tun-metadata.h" #include "unaligned.h" #include "unixctl.h" +#include "util.h" VLOG_DEFINE_THIS_MODULE(ofproto); diff --git a/ofproto/pinsched.c b/ofproto/pinsched.c index ee252f4..51f1760 100644 --- a/ofproto/pinsched.c +++ b/ofproto/pinsched.c @@ -23,7 +23,7 @@ #include #include "flow.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/ofpbuf.h" #include "openflow/openflow.h" #include "poll-loop.h" diff --git a/ofproto/tunnel.c b/ofproto/tunnel.c index 9695c54..fd48d6c 100644 --- a/ofproto/tunnel.c +++ b/ofproto/tunnel.c @@ -24,7 +24,7 @@ #include "openvswitch/dynamic-string.h" #include "fat-rwlock.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "netdev.h" #include "odp-util.h" #include "openvswitch/ofpbuf.h" diff --git a/ovn/controller-vtep/binding.c b/ovn/controller-vtep/binding.c index 65070d6..9cbfadc 100644 --- a/ovn/controller-vtep/binding.c +++ b/ovn/controller-vtep/binding.c @@ -16,7 +16,7 @@ #include #include "binding.h" -#include "lib/shash.h" +#include "openvswitch/shash.h" #include "lib/smap.h" #include "lib/util.h" #include "openvswitch/vlog.h" diff --git a/ovn/controller-vtep/vtep.c b/ovn/controller-vtep/vtep.c index 9e11e28..976e933 100644 --- a/ovn/controller-vtep/vtep.c +++ b/ovn/controller-vtep/vtep.c @@ -18,8 +18,8 @@ #include "vtep.h" #include "lib/hash.h" -#include "lib/hmap.h" -#include "lib/shash.h" +#include "openvswitch/hmap.h" +#include "openvswitch/shash.h" #include "lib/smap.h" #include "lib/sset.h" #include "lib/util.h" diff --git a/ovn/controller/binding.c b/ovn/controller/binding.c index 4704226..101864b 100644 --- a/ovn/controller/binding.c +++ b/ovn/controller/binding.c @@ -17,7 +17,7 @@ #include "binding.h" #include "lib/bitmap.h" -#include "lib/hmap.h" +#include "openvswitch/hmap.h" #include "lib/sset.h" #include "lib/util.h" #include "lib/vswitch-idl.h" diff --git a/ovn/controller/chassis.c b/ovn/controller/chassis.c index d40181b..502e74d 100644 --- a/ovn/controller/chassis.c +++ b/ovn/controller/chassis.c @@ -24,6 +24,7 @@ #include "openvswitch/vlog.h" #include "ovn/lib/ovn-sb-idl.h" #include "ovn-controller.h" +#include "lib/util.h" VLOG_DEFINE_THIS_MODULE(chassis); diff --git a/ovn/controller/lport.h b/ovn/controller/lport.h index 33f81d5..f681cb3 100644 --- a/ovn/controller/lport.h +++ b/ovn/controller/lport.h @@ -17,7 +17,7 @@ #define OVN_LPORT_H 1 #include -#include "hmap.h" +#include "openvswitch/hmap.h" #include "uuid.h" struct ovsdb_idl; diff --git a/ovn/controller/ofctrl.c b/ovn/controller/ofctrl.c index 4c410da..bbc580d 100644 --- a/ovn/controller/ofctrl.c +++ b/ovn/controller/ofctrl.c @@ -18,7 +18,7 @@ #include "byte-order.h" #include "dirs.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "ofctrl.h" #include "openflow/openflow.h" #include "openvswitch/dynamic-string.h" diff --git a/ovn/controller/ovn-controller.c b/ovn/controller/ovn-controller.c index 28ee13e..bd88c7d 100644 --- a/ovn/controller/ovn-controller.c +++ b/ovn/controller/ovn-controller.c @@ -32,7 +32,7 @@ #include "openvswitch/dynamic-string.h" #include "encaps.h" #include "fatal-signal.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "lflow.h" #include "lib/vswitch-idl.h" #include "lport.h" diff --git a/ovn/controller/patch.c b/ovn/controller/patch.c index 52d9e8d..eab3c1e 100644 --- a/ovn/controller/patch.c +++ b/ovn/controller/patch.c @@ -18,7 +18,7 @@ #include "patch.h" #include "hash.h" -#include "lib/hmap.h" +#include "openvswitch/hmap.h" #include "lib/vswitch-idl.h" #include "openvswitch/vlog.h" #include "ovn-controller.h" diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c index d1b40c2..cb4da3a 100644 --- a/ovn/controller/physical.c +++ b/ovn/controller/physical.c @@ -26,10 +26,11 @@ #include "ovn/lib/ovn-sb-idl.h" #include "ovn/lib/ovn-util.h" #include "physical.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "simap.h" #include "smap.h" #include "sset.h" +#include "util.h" #include "vswitch-idl.h" VLOG_DEFINE_THIS_MODULE(physical); diff --git a/ovn/lib/actions.c b/ovn/lib/actions.c index 3d10d61..6819a45 100644 --- a/ovn/lib/actions.c +++ b/ovn/lib/actions.c @@ -24,7 +24,7 @@ #include "ovn-dhcp.h" #include "expr.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "lex.h" #include "logical-fields.h" #include "nx-match.h" @@ -32,7 +32,7 @@ #include "openvswitch/ofp-actions.h" #include "openvswitch/ofpbuf.h" #include "packets.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "simap.h" /* Context maintained during actions_parse(). */ diff --git a/ovn/lib/actions.h b/ovn/lib/actions.h index 48f0140..114c71e 100644 --- a/ovn/lib/actions.h +++ b/ovn/lib/actions.h @@ -20,7 +20,7 @@ #include #include #include "compiler.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/dynamic-string.h" #include "util.h" diff --git a/ovn/lib/expr.c b/ovn/lib/expr.c index 8c0768d..1c38b99 100644 --- a/ovn/lib/expr.c +++ b/ovn/lib/expr.c @@ -17,16 +17,17 @@ #include #include "byte-order.h" #include "expr.h" -#include "json.h" +#include "openvswitch/json.h" #include "lex.h" #include "logical-fields.h" #include "openvswitch/dynamic-string.h" #include "openvswitch/match.h" #include "openvswitch/ofp-actions.h" #include "openvswitch/vlog.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "simap.h" #include "sset.h" +#include "util.h" VLOG_DEFINE_THIS_MODULE(expr); diff --git a/ovn/lib/expr.h b/ovn/lib/expr.h index ed5300f..d790c49 100644 --- a/ovn/lib/expr.h +++ b/ovn/lib/expr.h @@ -54,7 +54,7 @@ #include "classifier.h" #include "lex.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" #include "openvswitch/match.h" #include "openvswitch/meta-flow.h" diff --git a/ovn/lib/lex.c b/ovn/lib/lex.c index 52c0946..79aa221 100644 --- a/ovn/lib/lex.c +++ b/ovn/lib/lex.c @@ -20,7 +20,7 @@ #include #include #include "openvswitch/dynamic-string.h" -#include "json.h" +#include "openvswitch/json.h" #include "packets.h" #include "util.h" diff --git a/ovn/lib/ovn-dhcp.h b/ovn/lib/ovn-dhcp.h index 4da614b..6750f95 100644 --- a/ovn/lib/ovn-dhcp.h +++ b/ovn/lib/ovn-dhcp.h @@ -17,7 +17,7 @@ #ifndef OVN_DHCP_H #define OVN_DHCP_H 1 -#include "hmap.h" +#include "openvswitch/hmap.h" #include "hash.h" struct dhcp_opts_map { diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c index f4b4435..292bcef 100644 --- a/ovn/northd/ovn-northd.c +++ b/ovn/northd/ovn-northd.c @@ -24,8 +24,8 @@ #include "openvswitch/dynamic-string.h" #include "fatal-signal.h" #include "hash.h" -#include "hmap.h" -#include "json.h" +#include "openvswitch/hmap.h" +#include "openvswitch/json.h" #include "ovn/lib/lex.h" #include "ovn/lib/ovn-nb-idl.h" #include "ovn/lib/ovn-sb-idl.h" diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c index ad70a05..48a7469 100644 --- a/ovn/utilities/ovn-nbctl.c +++ b/ovn/utilities/ovn-nbctl.c @@ -23,7 +23,7 @@ #include "db-ctl-base.h" #include "dirs.h" #include "fatal-signal.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovn/lib/ovn-nb-idl.h" #include "packets.h" #include "poll-loop.h" diff --git a/ovn/utilities/ovn-sbctl.c b/ovn/utilities/ovn-sbctl.c index 37e4bce..815f3fb 100644 --- a/ovn/utilities/ovn-sbctl.c +++ b/ovn/utilities/ovn-sbctl.c @@ -34,13 +34,13 @@ #include "compiler.h" #include "openvswitch/dynamic-string.h" #include "fatal-signal.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovsdb-data.h" #include "ovsdb-idl.h" #include "poll-loop.h" #include "process.h" #include "sset.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "stream-ssl.h" #include "stream.h" #include "table.h" diff --git a/ovsdb/column.c b/ovsdb/column.c index b41df2e..8838df3 100644 --- a/ovsdb/column.c +++ b/ovsdb/column.c @@ -21,7 +21,7 @@ #include "column.h" #include "openvswitch/dynamic-string.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovsdb-error.h" #include "ovsdb-parser.h" #include "table.h" diff --git a/ovsdb/condition.c b/ovsdb/condition.c index 4baf1bb..a76c168 100644 --- a/ovsdb/condition.c +++ b/ovsdb/condition.c @@ -20,10 +20,14 @@ #include #include "column.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovsdb-error.h" #include "row.h" + +#include + #include "table.h" +#include "util.h" struct ovsdb_error * ovsdb_function_from_string(const char *name, enum ovsdb_function *function) diff --git a/ovsdb/execution.c b/ovsdb/execution.c index de25a87..83f7cfb 100644 --- a/ovsdb/execution.c +++ b/ovsdb/execution.c @@ -20,7 +20,7 @@ #include "column.h" #include "condition.h" #include "file.h" -#include "json.h" +#include "openvswitch/json.h" #include "mutation.h" #include "ovsdb-data.h" #include "ovsdb-error.h" diff --git a/ovsdb/file.c b/ovsdb/file.c index 2894f30..7f8554a 100644 --- a/ovsdb/file.c +++ b/ovsdb/file.c @@ -24,7 +24,7 @@ #include "bitmap.h" #include "column.h" #include "log.h" -#include "json.h" +#include "openvswitch/json.h" #include "lockfile.h" #include "ovsdb.h" #include "ovsdb-error.h" diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c index 4913d7e..b11791f 100644 --- a/ovsdb/jsonrpc-server.c +++ b/ovsdb/jsonrpc-server.c @@ -23,7 +23,7 @@ #include "column.h" #include "openvswitch/dynamic-string.h" #include "monitor.h" -#include "json.h" +#include "openvswitch/json.h" #include "jsonrpc.h" #include "ovsdb-error.h" #include "ovsdb-parser.h" @@ -38,6 +38,7 @@ #include "timeval.h" #include "transaction.h" #include "trigger.h" +#include "util.h" #include "openvswitch/vlog.h" VLOG_DEFINE_THIS_MODULE(ovsdb_jsonrpc_server); diff --git a/ovsdb/log.c b/ovsdb/log.c index 8004d3d..380f5e9 100644 --- a/ovsdb/log.c +++ b/ovsdb/log.c @@ -24,7 +24,7 @@ #include #include -#include "json.h" +#include "openvswitch/json.h" #include "lockfile.h" #include "ovsdb.h" #include "ovsdb-error.h" diff --git a/ovsdb/monitor.c b/ovsdb/monitor.c index e910e3f..949f77c 100644 --- a/ovsdb/monitor.c +++ b/ovsdb/monitor.c @@ -21,7 +21,7 @@ #include "bitmap.h" #include "column.h" #include "openvswitch/dynamic-string.h" -#include "json.h" +#include "openvswitch/json.h" #include "jsonrpc.h" #include "ovsdb-error.h" #include "ovsdb-parser.h" @@ -35,6 +35,7 @@ #include "transaction.h" #include "jsonrpc-server.h" #include "monitor.h" +#include "util.h" #include "openvswitch/vlog.h" diff --git a/ovsdb/mutation.c b/ovsdb/mutation.c index 6a43e34..e5d192e 100644 --- a/ovsdb/mutation.c +++ b/ovsdb/mutation.c @@ -22,9 +22,13 @@ #include "column.h" #include "ovsdb-error.h" -#include "json.h" +#include "openvswitch/json.h" #include "row.h" + +#include + #include "table.h" +#include "util.h" struct ovsdb_error * ovsdb_mutator_from_string(const char *name, enum ovsdb_mutator *mutator) diff --git a/ovsdb/ovsdb-client.c b/ovsdb/ovsdb-client.c index 80819a8..16dadea 100644 --- a/ovsdb/ovsdb-client.c +++ b/ovsdb/ovsdb-client.c @@ -32,7 +32,7 @@ #include "dirs.h" #include "openvswitch/dynamic-string.h" #include "fatal-signal.h" -#include "json.h" +#include "openvswitch/json.h" #include "jsonrpc.h" #include "lib/table.h" #include "ovsdb.h" diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index 1b9de19..10ebb5e 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -30,7 +30,7 @@ #include "fatal-signal.h" #include "file.h" #include "hash.h" -#include "json.h" +#include "openvswitch/json.h" #include "jsonrpc.h" #include "jsonrpc-server.h" #include "openvswitch/list.h" @@ -45,7 +45,7 @@ #include "replication.h" #include "row.h" #include "simap.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "stream-ssl.h" #include "stream.h" #include "sset.h" diff --git a/ovsdb/ovsdb-tool.c b/ovsdb/ovsdb-tool.c index 37e219f..af83da2 100644 --- a/ovsdb/ovsdb-tool.c +++ b/ovsdb/ovsdb-tool.c @@ -31,7 +31,7 @@ #include "file.h" #include "lockfile.h" #include "log.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovsdb.h" #include "ovsdb-data.h" #include "ovsdb-error.h" diff --git a/ovsdb/ovsdb.c b/ovsdb/ovsdb.c index b7cc655..0391900 100644 --- a/ovsdb/ovsdb.c +++ b/ovsdb/ovsdb.c @@ -18,7 +18,7 @@ #include "ovsdb.h" #include "column.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovsdb-error.h" #include "ovsdb-parser.h" #include "ovsdb-types.h" diff --git a/ovsdb/ovsdb.h b/ovsdb/ovsdb.h index b3eaf15..418805c 100644 --- a/ovsdb/ovsdb.h +++ b/ovsdb/ovsdb.h @@ -17,9 +17,9 @@ #define OVSDB_OVSDB_H 1 #include "compiler.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" -#include "shash.h" +#include "openvswitch/shash.h" struct json; struct ovsdb_log; diff --git a/ovsdb/replication.c b/ovsdb/replication.c index a267a3a..ee0548a 100644 --- a/ovsdb/replication.c +++ b/ovsdb/replication.c @@ -20,7 +20,7 @@ #include "replication.h" #include "condition.h" -#include "json.h" +#include "openvswitch/json.h" #include "jsonrpc.h" #include "ovsdb.h" #include "ovsdb-error.h" diff --git a/ovsdb/replication.h b/ovsdb/replication.h index 74acdba..b2e2c77 100644 --- a/ovsdb/replication.h +++ b/ovsdb/replication.h @@ -18,7 +18,7 @@ #ifndef REPLICATION_H #define REPLICATION_H 1 -#include "shash.h" +#include "openvswitch/shash.h" struct db { /* Initialized in main(). */ diff --git a/ovsdb/row.c b/ovsdb/row.c index 572c103..9c31294 100644 --- a/ovsdb/row.c +++ b/ovsdb/row.c @@ -20,11 +20,12 @@ #include #include "openvswitch/dynamic-string.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovsdb-error.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "sort.h" #include "table.h" +#include "util.h" static struct ovsdb_row * allocate_row(const struct ovsdb_table *table) diff --git a/ovsdb/row.h b/ovsdb/row.h index b1d1edd..83024bc 100644 --- a/ovsdb/row.h +++ b/ovsdb/row.h @@ -19,7 +19,7 @@ #include #include #include "column.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" #include "ovsdb-data.h" diff --git a/ovsdb/server.h b/ovsdb/server.h index 667fce9..c0bbb69 100644 --- a/ovsdb/server.h +++ b/ovsdb/server.h @@ -16,9 +16,9 @@ #ifndef SERVER_H #define SERVER_H 1 -#include "hmap.h" +#include "openvswitch/hmap.h" #include "openvswitch/list.h" -#include "shash.h" +#include "openvswitch/shash.h" struct ovsdb; struct ovsdb_server; diff --git a/ovsdb/table.c b/ovsdb/table.c index e7545ad..7ec55d6 100644 --- a/ovsdb/table.c +++ b/ovsdb/table.c @@ -19,7 +19,7 @@ #include -#include "json.h" +#include "openvswitch/json.h" #include "column.h" #include "ovsdb-error.h" #include "ovsdb-parser.h" diff --git a/ovsdb/table.h b/ovsdb/table.h index 68a59ad..f910d18 100644 --- a/ovsdb/table.h +++ b/ovsdb/table.h @@ -18,8 +18,8 @@ #include #include "compiler.h" -#include "hmap.h" -#include "shash.h" +#include "openvswitch/hmap.h" +#include "openvswitch/shash.h" struct json; struct uuid; diff --git a/ovsdb/transaction.c b/ovsdb/transaction.c index 9e12a62..865e9b6 100644 --- a/ovsdb/transaction.c +++ b/ovsdb/transaction.c @@ -20,8 +20,8 @@ #include "bitmap.h" #include "openvswitch/dynamic-string.h" #include "hash.h" -#include "hmap.h" -#include "json.h" +#include "openvswitch/hmap.h" +#include "openvswitch/json.h" #include "openvswitch/list.h" #include "ovsdb-error.h" #include "ovsdb.h" diff --git a/ovsdb/trigger.c b/ovsdb/trigger.c index 3392fb7..0fbe949 100644 --- a/ovsdb/trigger.c +++ b/ovsdb/trigger.c @@ -19,7 +19,7 @@ #include -#include "json.h" +#include "openvswitch/json.h" #include "jsonrpc.h" #include "ovsdb.h" #include "poll-loop.h" diff --git a/python/ovs/_json.c b/python/ovs/_json.c index c4e2af3..7067ce2 100644 --- a/python/ovs/_json.c +++ b/python/ovs/_json.c @@ -1,5 +1,5 @@ #include "Python.h" -#include +#include #include "structmember.h" #if PY_MAJOR_VERSION >= 3 diff --git a/tests/test-ccmap.c b/tests/test-ccmap.c index 2f2cdd6..4efe1b9 100644 --- a/tests/test-ccmap.c +++ b/tests/test-ccmap.c @@ -27,7 +27,7 @@ #include "command-line.h" #include "fat-rwlock.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "ovstest.h" #include "ovs-thread.h" #include "random.h" diff --git a/tests/test-cmap.c b/tests/test-cmap.c index 05aba00..4cac7de 100644 --- a/tests/test-cmap.c +++ b/tests/test-cmap.c @@ -27,7 +27,7 @@ #include "command-line.h" #include "fat-rwlock.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "ovstest.h" #include "ovs-thread.h" #include "random.h" diff --git a/tests/test-hmap.c b/tests/test-hmap.c index c63bd80..9259b0b 100644 --- a/tests/test-hmap.c +++ b/tests/test-hmap.c @@ -19,7 +19,7 @@ #include #undef NDEBUG -#include "hmap.h" +#include "openvswitch/hmap.h" #include #include #include "hash.h" diff --git a/tests/test-json.c b/tests/test-json.c index 692013e..2819210 100644 --- a/tests/test-json.c +++ b/tests/test-json.c @@ -16,7 +16,7 @@ #include #undef NDEBUG -#include "json.h" +#include "openvswitch/json.h" #include #include #include diff --git a/tests/test-jsonrpc.c b/tests/test-jsonrpc.c index feac0b0..be79064 100644 --- a/tests/test-jsonrpc.c +++ b/tests/test-jsonrpc.c @@ -24,7 +24,7 @@ #include #include "command-line.h" #include "daemon.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovstest.h" #include "poll-loop.h" #include "stream-ssl.h" diff --git a/tests/test-ovn.c b/tests/test-ovn.c index 1291d04..87b7725 100644 --- a/tests/test-ovn.c +++ b/tests/test-ovn.c @@ -32,7 +32,7 @@ #include "ovn/lib/ovn-dhcp.h" #include "ovs-thread.h" #include "ovstest.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "simap.h" #include "util.h" diff --git a/tests/test-ovsdb.c b/tests/test-ovsdb.c index 61ba7d8..29fb88d 100644 --- a/tests/test-ovsdb.c +++ b/tests/test-ovsdb.c @@ -26,7 +26,7 @@ #include "byte-order.h" #include "command-line.h" #include "openvswitch/dynamic-string.h" -#include "json.h" +#include "openvswitch/json.h" #include "jsonrpc.h" #include "ovsdb-data.h" #include "ovsdb-error.h" diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c index c4ae692..47797bd 100644 --- a/utilities/ovs-vsctl.c +++ b/utilities/ovs-vsctl.c @@ -34,7 +34,7 @@ #include "openvswitch/dynamic-string.h" #include "fatal-signal.h" #include "hash.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovsdb-data.h" #include "ovsdb-idl.h" #include "poll-loop.h" diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index a5de84e..03c5004 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -29,7 +29,7 @@ #include "dirs.h" #include "dpif.h" #include "hash.h" -#include "hmap.h" +#include "openvswitch/hmap.h" #include "hmapx.h" #include "if-notifier.h" #include "jsonrpc.h" @@ -55,7 +55,7 @@ #include "seq.h" #include "sflow_api.h" #include "sha1.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "smap.h" #include "socket-util.h" #include "stream.h" diff --git a/vswitchd/system-stats.c b/vswitchd/system-stats.c index 129f0cf..49e5419 100644 --- a/vswitchd/system-stats.c +++ b/vswitchd/system-stats.c @@ -34,13 +34,13 @@ #include "daemon.h" #include "dirs.h" #include "openvswitch/dynamic-string.h" -#include "json.h" +#include "openvswitch/json.h" #include "latch.h" #include "openvswitch/ofpbuf.h" #include "ovs-rcu.h" #include "ovs-thread.h" #include "poll-loop.h" -#include "shash.h" +#include "openvswitch/shash.h" #include "smap.h" #include "timeval.h" #include "openvswitch/vlog.h" diff --git a/vtep/vtep-ctl.c b/vtep/vtep-ctl.c index 759150f..245ba0d 100644 --- a/vtep/vtep-ctl.c +++ b/vtep/vtep-ctl.c @@ -34,7 +34,7 @@ #include "openvswitch/dynamic-string.h" #include "fatal-signal.h" #include "hash.h" -#include "json.h" +#include "openvswitch/json.h" #include "ovsdb-data.h" #include "ovsdb-idl.h" #include "poll-loop.h"