mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +00:00
lib: Expose struct ovs_list definition in <openvswitch/list.h>
Expose the struct ovs_list definition in <openvswitch/list.h>. Keep the list access API private for now. Signed-off-by: Thomas Graf <tgraf@noironetworks.com> Acked-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
openvswitchincludedir = $(includedir)/openvswitch
|
||||
openvswitchinclude_HEADERS = \
|
||||
include/openvswitch/compiler.h \
|
||||
include/openvswitch/list.h \
|
||||
include/openvswitch/thread.h \
|
||||
include/openvswitch/token-bucket.h \
|
||||
include/openvswitch/types.h \
|
||||
|
27
include/openvswitch/list.h
Normal file
27
include/openvswitch/list.h
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (c) 2008, 2009, 2010, 2011, 2013 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 OPENVSWITCH_LIST_H
|
||||
#define OPENVSWITCH_LIST_H 1
|
||||
|
||||
/* Doubly linked list head or element. */
|
||||
struct ovs_list {
|
||||
struct ovs_list *prev; /* Previous list element. */
|
||||
struct ovs_list *next; /* Next list element. */
|
||||
};
|
||||
|
||||
#define OVS_LIST_INITIALIZER(LIST) { LIST, LIST }
|
||||
|
||||
#endif /* list.h */
|
@@ -28,9 +28,9 @@ struct guarded_list {
|
||||
size_t n;
|
||||
};
|
||||
|
||||
#define GUARDED_LIST_INITIALIZER(LIST) { \
|
||||
#define GUARDED_OVS_LIST_INITIALIZER(LIST) { \
|
||||
.mutex = OVS_MUTEX_INITIALIZER, \
|
||||
.list = LIST_INITIALIZER(&((LIST)->list)), \
|
||||
.list = OVS_LIST_INITIALIZER(&((LIST)->list)), \
|
||||
.n = 0 }
|
||||
|
||||
void guarded_list_init(struct guarded_list *);
|
||||
|
@@ -132,7 +132,7 @@ struct slave {
|
||||
};
|
||||
|
||||
static struct ovs_mutex mutex;
|
||||
static struct ovs_list all_lacps__ = LIST_INITIALIZER(&all_lacps__);
|
||||
static struct ovs_list all_lacps__ = OVS_LIST_INITIALIZER(&all_lacps__);
|
||||
static struct ovs_list *const all_lacps OVS_GUARDED_BY(mutex) = &all_lacps__;
|
||||
|
||||
static void lacp_update_attached(struct lacp *) OVS_REQUIRES(mutex);
|
||||
|
@@ -21,14 +21,7 @@
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include "util.h"
|
||||
|
||||
/* Doubly linked list head or element. */
|
||||
struct ovs_list {
|
||||
struct ovs_list *prev; /* Previous list element. */
|
||||
struct ovs_list *next; /* Next list element. */
|
||||
};
|
||||
|
||||
#define LIST_INITIALIZER(LIST) { LIST, LIST }
|
||||
#include "openvswitch/list.h"
|
||||
|
||||
static inline void list_init(struct ovs_list *);
|
||||
static inline void list_poison(struct ovs_list *);
|
||||
|
@@ -135,10 +135,10 @@ static struct ovs_mutex dpdk_mutex = OVS_MUTEX_INITIALIZER;
|
||||
|
||||
/* Contains all 'struct dpdk_dev's. */
|
||||
static struct ovs_list dpdk_list OVS_GUARDED_BY(dpdk_mutex)
|
||||
= LIST_INITIALIZER(&dpdk_list);
|
||||
= OVS_LIST_INITIALIZER(&dpdk_list);
|
||||
|
||||
static struct ovs_list dpdk_mp_list OVS_GUARDED_BY(dpdk_mutex)
|
||||
= LIST_INITIALIZER(&dpdk_mp_list);
|
||||
= OVS_LIST_INITIALIZER(&dpdk_mp_list);
|
||||
|
||||
/* This mutex must be used by non pmd threads when allocating or freeing
|
||||
* mbufs through mempools. Since dpdk_queue_pkts() and dpdk_queue_flush() may
|
||||
@@ -168,7 +168,7 @@ struct dpdk_tx_queue {
|
||||
*/
|
||||
|
||||
static struct ovs_list dpdk_ring_list OVS_GUARDED_BY(dpdk_mutex)
|
||||
= LIST_INITIALIZER(&dpdk_ring_list);
|
||||
= OVS_LIST_INITIALIZER(&dpdk_ring_list);
|
||||
|
||||
struct dpdk_ring {
|
||||
/* For the client rings */
|
||||
|
@@ -88,7 +88,7 @@ static struct ovs_mutex dummy_list_mutex = OVS_MUTEX_INITIALIZER;
|
||||
|
||||
/* Contains all 'struct dummy_dev's. */
|
||||
static struct ovs_list dummy_list OVS_GUARDED_BY(dummy_list_mutex)
|
||||
= LIST_INITIALIZER(&dummy_list);
|
||||
= OVS_LIST_INITIALIZER(&dummy_list);
|
||||
|
||||
struct netdev_dummy {
|
||||
struct netdev up;
|
||||
|
@@ -621,14 +621,14 @@ static struct ovs_mutex key_mutex = OVS_MUTEX_INITIALIZER;
|
||||
* Together, 'inuse_keys' and 'free_keys' hold an ovsthread_key for every index
|
||||
* from 0 to n_keys - 1, inclusive. */
|
||||
static struct ovs_list inuse_keys OVS_GUARDED_BY(key_mutex)
|
||||
= LIST_INITIALIZER(&inuse_keys);
|
||||
= OVS_LIST_INITIALIZER(&inuse_keys);
|
||||
static struct ovs_list free_keys OVS_GUARDED_BY(key_mutex)
|
||||
= LIST_INITIALIZER(&free_keys);
|
||||
= OVS_LIST_INITIALIZER(&free_keys);
|
||||
static unsigned int n_keys OVS_GUARDED_BY(key_mutex);
|
||||
|
||||
/* All existing struct ovsthread_key_slots. */
|
||||
static struct ovs_list slots_list OVS_GUARDED_BY(key_mutex)
|
||||
= LIST_INITIALIZER(&slots_list);
|
||||
= OVS_LIST_INITIALIZER(&slots_list);
|
||||
|
||||
static void *
|
||||
clear_slot(struct ovsthread_key_slots *slots, unsigned int index)
|
||||
|
@@ -54,7 +54,7 @@ struct process {
|
||||
static int fds[2];
|
||||
|
||||
/* All processes. */
|
||||
static struct ovs_list all_processes = LIST_INITIALIZER(&all_processes);
|
||||
static struct ovs_list all_processes = OVS_LIST_INITIALIZER(&all_processes);
|
||||
|
||||
static void sigchld_handler(int signr OVS_UNUSED);
|
||||
|
||||
|
@@ -75,7 +75,7 @@ static inline const struct rculist *rculist_next(const struct rculist *);
|
||||
static inline struct rculist *rculist_next_protected(const struct rculist *);
|
||||
|
||||
/* List initialization. */
|
||||
#define RCULIST_INITIALIZER(LIST) { LIST, OVSRCU_INITIALIZER(LIST) }
|
||||
#define RCUOVS_LIST_INITIALIZER(LIST) { LIST, OVSRCU_INITIALIZER(LIST) }
|
||||
|
||||
static inline void rculist_init(struct rculist *list);
|
||||
static inline void rculist_poison(struct rculist *elem);
|
||||
|
@@ -50,7 +50,7 @@ VLOG_DEFINE_THIS_MODULE(rstp);
|
||||
|
||||
struct ovs_mutex rstp_mutex = OVS_MUTEX_INITIALIZER;
|
||||
|
||||
static struct ovs_list all_rstps__ = LIST_INITIALIZER(&all_rstps__);
|
||||
static struct ovs_list all_rstps__ = OVS_LIST_INITIALIZER(&all_rstps__);
|
||||
static struct ovs_list *const all_rstps OVS_GUARDED_BY(rstp_mutex) = &all_rstps__;
|
||||
|
||||
/* Internal use only. */
|
||||
|
@@ -38,7 +38,7 @@ static struct ovs_mutex rtbsd_mutex = OVS_MUTEX_INITIALIZER;
|
||||
static int notify_sock = -1;
|
||||
|
||||
/* All registered notifiers. */
|
||||
static struct ovs_list all_notifiers = LIST_INITIALIZER(&all_notifiers);
|
||||
static struct ovs_list all_notifiers = OVS_LIST_INITIALIZER(&all_notifiers);
|
||||
|
||||
static void rtbsd_report_change(const struct if_msghdr *)
|
||||
OVS_REQUIRES(rtbsd_mutex);
|
||||
|
@@ -150,7 +150,7 @@ struct stp {
|
||||
};
|
||||
|
||||
static struct ovs_mutex mutex;
|
||||
static struct ovs_list all_stps__ = LIST_INITIALIZER(&all_stps__);
|
||||
static struct ovs_list all_stps__ = OVS_LIST_INITIALIZER(&all_stps__);
|
||||
static struct ovs_list *const all_stps OVS_GUARDED_BY(mutex) = &all_stps__;
|
||||
|
||||
#define FOR_EACH_ENABLED_PORT(PORT, STP) \
|
||||
|
@@ -75,7 +75,7 @@ VLOG_LEVELS
|
||||
BUILD_ASSERT_DECL(LOG_LOCAL0 == (16 << 3));
|
||||
|
||||
/* The log modules. */
|
||||
struct ovs_list vlog_modules = LIST_INITIALIZER(&vlog_modules);
|
||||
struct ovs_list vlog_modules = OVS_LIST_INITIALIZER(&vlog_modules);
|
||||
|
||||
/* Protects the 'pattern' in all "struct facility"s, so that a race between
|
||||
* changing and reading the pattern does not cause an access to freed
|
||||
|
@@ -281,7 +281,7 @@ void vlog_usage(void);
|
||||
extern struct vlog_module VLM_##MODULE; \
|
||||
struct vlog_module VLM_##MODULE = \
|
||||
{ \
|
||||
LIST_INITIALIZER(&VLM_##MODULE.list), \
|
||||
OVS_LIST_INITIALIZER(&VLM_##MODULE.list), \
|
||||
#MODULE, /* name */ \
|
||||
{ VLL_INFO, VLL_INFO, VLL_INFO }, /* levels */ \
|
||||
VLL_INFO, /* min_level */ \
|
||||
|
@@ -69,7 +69,7 @@ static struct heap monitor_heap;
|
||||
|
||||
/* guarded-list for storing the mports that need to send bfd/cfm control
|
||||
* packet soon. */
|
||||
static struct guarded_list send_soon = GUARDED_LIST_INITIALIZER(&send_soon);
|
||||
static struct guarded_list send_soon = GUARDED_OVS_LIST_INITIALIZER(&send_soon);
|
||||
|
||||
/* The monitor thread id. */
|
||||
static pthread_t monitor_tid;
|
||||
|
@@ -237,7 +237,7 @@ struct ukey_op {
|
||||
};
|
||||
|
||||
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
|
||||
static struct ovs_list all_udpifs = LIST_INITIALIZER(&all_udpifs);
|
||||
static struct ovs_list all_udpifs = OVS_LIST_INITIALIZER(&all_udpifs);
|
||||
|
||||
static size_t recv_upcalls(struct handler *);
|
||||
static int process_upcall(struct udpif *, struct upcall *,
|
||||
|
@@ -4329,7 +4329,7 @@ modify_flows__(struct ofproto *ofproto, struct ofputil_flow_mod *fm,
|
||||
const struct flow_mod_requester *req)
|
||||
OVS_REQUIRES(ofproto_mutex)
|
||||
{
|
||||
struct ovs_list dead_cookies = LIST_INITIALIZER(&dead_cookies);
|
||||
struct ovs_list dead_cookies = OVS_LIST_INITIALIZER(&dead_cookies);
|
||||
enum nx_flow_update_event event;
|
||||
size_t i;
|
||||
|
||||
@@ -4510,7 +4510,7 @@ delete_flows__(const struct rule_collection *rules,
|
||||
OVS_REQUIRES(ofproto_mutex)
|
||||
{
|
||||
if (rules->n) {
|
||||
struct ovs_list dead_cookies = LIST_INITIALIZER(&dead_cookies);
|
||||
struct ovs_list dead_cookies = OVS_LIST_INITIALIZER(&dead_cookies);
|
||||
struct ofproto *ofproto = rules->rules[0]->ofproto;
|
||||
struct rule *rule, *next;
|
||||
size_t i;
|
||||
|
Reference in New Issue
Block a user