[ovs-dev] [PATCH v4 2/3] rstp: Add internal functions without locks.
nickcooper-zhangtonghao
nic at opencloud.tech
Thu Jun 1 03:38:15 UTC 2017
This patch adds some internal functions which
does not use the locks. This patch is used for
next patch.
Signed-off-by: nickcooper-zhangtonghao <nic at opencloud.tech>
---
lib/rstp.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++-------------
lib/rstp.h | 2 +-
2 files changed, 51 insertions(+), 14 deletions(-)
diff --git a/lib/rstp.c b/lib/rstp.c
index 67e6912..4455c4a 100644
--- a/lib/rstp.c
+++ b/lib/rstp.c
@@ -120,6 +120,16 @@ static void rstp_port_set_mcheck__(struct rstp_port *, bool mcheck)
OVS_REQUIRES(rstp_mutex);
static void reinitialize_port__(struct rstp_port *p)
OVS_REQUIRES(rstp_mutex);
+static bool rstp_is_root_bridge__(const struct rstp *rstp)
+ OVS_REQUIRES(rstp_mutex);
+static uint32_t rstp_get_root_path_cost__(const struct rstp *rstp)
+ OVS_REQUIRES(rstp_mutex);
+static struct rstp_port *rstp_get_root_port__(const struct rstp *rstp)
+ OVS_REQUIRES(rstp_mutex);
+static rstp_identifier rstp_get_root_id__(const struct rstp *rstp)
+ OVS_REQUIRES(rstp_mutex);
+static void rstp_unixctl_tcn(struct unixctl_conn *, int argc,
+ const char *argv[], void *aux);
const char *
rstp_state_name(enum rstp_state state)
@@ -208,9 +218,6 @@ rstp_port_get_number(const struct rstp_port *p)
return number;
}
-static void rstp_unixctl_tcn(struct unixctl_conn *, int argc,
- const char *argv[], void *aux);
-
/* Decrements the State Machines' timers. */
void
rstp_tick_timers(struct rstp *rstp)
@@ -796,6 +803,13 @@ rstp_port_set_path_cost__(struct rstp_port *port, uint32_t path_cost)
}
/* Gets the root path cost. */
+static uint32_t
+rstp_get_root_path_cost__(const struct rstp *rstp)
+ OVS_REQUIRES(rstp_mutex)
+{
+ return rstp->root_priority.root_path_cost;
+}
+
uint32_t
rstp_get_root_path_cost(const struct rstp *rstp)
OVS_EXCLUDED(rstp_mutex)
@@ -803,7 +817,7 @@ rstp_get_root_path_cost(const struct rstp *rstp)
uint32_t cost;
ovs_mutex_lock(&rstp_mutex);
- cost = rstp->root_priority.root_path_cost;
+ cost = rstp_get_root_path_cost__(rstp);
ovs_mutex_unlock(&rstp_mutex);
return cost;
}
@@ -1313,6 +1327,13 @@ rstp_get_designated_id(const struct rstp *rstp)
}
/* Returns the root bridge id. */
+static rstp_identifier
+rstp_get_root_id__(const struct rstp *rstp)
+ OVS_REQUIRES(rstp_mutex)
+{
+ return rstp->root_priority.root_bridge_id;
+}
+
rstp_identifier
rstp_get_root_id(const struct rstp *rstp)
OVS_EXCLUDED(rstp_mutex)
@@ -1320,7 +1341,7 @@ rstp_get_root_id(const struct rstp *rstp)
rstp_identifier root_id;
ovs_mutex_lock(&rstp_mutex);
- root_id = rstp->root_priority.root_bridge_id;
+ root_id = rstp_get_root_id__(rstp);
ovs_mutex_unlock(&rstp_mutex);
return root_id;
@@ -1357,6 +1378,14 @@ rstp_get_bridge_port_id(const struct rstp *rstp)
/* Returns true if the bridge believes to the be root of the spanning tree,
* false otherwise.
*/
+static bool
+rstp_is_root_bridge__(const struct rstp *rstp)
+ OVS_REQUIRES(rstp_mutex)
+{
+ return rstp->bridge_identifier ==
+ rstp->root_priority.designated_bridge_id;
+}
+
bool
rstp_is_root_bridge(const struct rstp *rstp)
OVS_EXCLUDED(rstp_mutex)
@@ -1364,8 +1393,7 @@ rstp_is_root_bridge(const struct rstp *rstp)
bool is_root;
ovs_mutex_lock(&rstp_mutex);
- is_root = rstp->bridge_identifier ==
- rstp->root_priority.designated_bridge_id;
+ is_root = rstp_is_root_bridge__(rstp);
ovs_mutex_unlock(&rstp_mutex);
return is_root;
@@ -1388,23 +1416,32 @@ rstp_get_designated_root(const struct rstp *rstp)
/* Returns the port connecting 'rstp' to the root bridge, or a null pointer if
* there is no such port.
*/
-struct rstp_port *
-rstp_get_root_port(struct rstp *rstp)
- OVS_EXCLUDED(rstp_mutex)
+static struct rstp_port *
+rstp_get_root_port__(const struct rstp *rstp)
+ OVS_REQUIRES(rstp_mutex)
{
struct rstp_port *p;
- ovs_mutex_lock(&rstp_mutex);
HMAP_FOR_EACH (p, node, &rstp->ports) {
if (p->port_id == rstp->root_port_id) {
- ovs_mutex_unlock(&rstp_mutex);
return p;
}
}
- ovs_mutex_unlock(&rstp_mutex);
return NULL;
}
+struct rstp_port *
+rstp_get_root_port(const struct rstp *rstp)
+ OVS_EXCLUDED(rstp_mutex)
+{
+ struct rstp_port *p;
+
+ ovs_mutex_lock(&rstp_mutex);
+ p = rstp_get_root_port__(rstp);
+ ovs_mutex_unlock(&rstp_mutex);
+ return p;
+}
+
/* Returns the state of port 'p'. */
enum rstp_state
rstp_port_get_state(const struct rstp_port *p)
diff --git a/lib/rstp.h b/lib/rstp.h
index 5213f98..39a13b5 100644
--- a/lib/rstp.h
+++ b/lib/rstp.h
@@ -207,7 +207,7 @@ uint16_t rstp_get_designated_port_id(const struct rstp *)
OVS_EXCLUDED(rstp_mutex);
uint16_t rstp_get_bridge_port_id(const struct rstp *)
OVS_EXCLUDED(rstp_mutex);
-struct rstp_port * rstp_get_root_port(struct rstp *)
+struct rstp_port * rstp_get_root_port(const struct rstp *)
OVS_EXCLUDED(rstp_mutex);
rstp_identifier rstp_get_designated_root(const struct rstp *)
OVS_EXCLUDED(rstp_mutex);
--
1.8.3.1
More information about the dev
mailing list