Acked-by: Daniele Venturino <daniele.ventur...@m3s.it> 2014-08-21 1:57 GMT+02:00 Jarno Rajahalme <jrajaha...@nicira.com>:
> Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com> > --- > lib/rstp.c | 54 ++++++++++++++++++++++-------------------------------- > 1 file changed, 22 insertions(+), 32 deletions(-) > > diff --git a/lib/rstp.c b/lib/rstp.c > index 17830d9..6254bb8 100644 > --- a/lib/rstp.c > +++ b/lib/rstp.c > @@ -225,19 +225,32 @@ rstp_create(const char *name, rstp_identifier > bridge_address, > */ > static void > set_bridge_priority__(struct rstp *rstp) > + OVS_REQUIRES(mutex) > { > rstp->bridge_priority.root_bridge_id = rstp->bridge_identifier; > rstp->bridge_priority.designated_bridge_id = rstp->bridge_identifier; > VLOG_DBG("%s: new bridge identifier: "RSTP_ID_FMT"", rstp->name, > RSTP_ID_ARGS(rstp->bridge_identifier)); > + > + /* [17.13] When the bridge address changes, recalculates all priority > + * vectors. > + */ > + if (rstp->ports_count > 0) { > + struct rstp_port *p; > + > + LIST_FOR_EACH (p, node, &rstp->ports) { > + p->selected = false; > + p->reselect = true; > + } > + } > + rstp->changes = true; > + updt_roles_tree(rstp); > } > > /* Sets the bridge address. */ > void > rstp_set_bridge_address(struct rstp *rstp, rstp_identifier bridge_address) > { > - struct rstp_port *p; > - > VLOG_DBG("%s: set bridge address to: "RSTP_ID_FMT"", rstp->name, > RSTP_ID_ARGS(bridge_address)); > > @@ -245,18 +258,6 @@ rstp_set_bridge_address(struct rstp *rstp, > rstp_identifier bridge_address) > rstp->address = bridge_address; > rstp->bridge_identifier = bridge_address; > set_bridge_priority__(rstp); > - > - /* [17.13] When the bridge address changes, recalculates all priority > - * vectors. > - */ > - if (rstp->ports_count > 0) { > - LIST_FOR_EACH (p, node, &rstp->ports) { > - p->selected = false; > - p->reselect = true; > - } > - } > - rstp->changes = true; > - updt_roles_tree(rstp); > ovs_mutex_unlock(&mutex); > } > > @@ -286,28 +287,17 @@ rstp_get_bridge_id(const struct rstp *rstp) > void > rstp_set_bridge_priority(struct rstp *rstp, int new_priority) > { > - struct rstp_port *p; > + new_priority = ROUND_DOWN(new_priority, RSTP_PRIORITY_STEP); > + > + if (new_priority >= RSTP_MIN_PRIORITY > + && new_priority <= RSTP_MAX_PRIORITY) { > + VLOG_DBG("%s: set bridge priority to %d", rstp->name, > new_priority); > > - if (new_priority >= RSTP_MIN_PRIORITY && > - new_priority <= RSTP_MAX_PRIORITY) { > - VLOG_DBG("%s: set bridge priority to %d", rstp->name, > - (new_priority / 4096) * 4096); > ovs_mutex_lock(&mutex); > - rstp->priority = (new_priority / 4096) * 4096; > + rstp->priority = new_priority; > rstp->bridge_identifier &= 0x0000ffffffffffffULL; > - rstp->bridge_identifier |= > - (uint64_t) ((new_priority / 4096) * 4096) > << 48; > + rstp->bridge_identifier |= (uint64_t)new_priority << 48; > set_bridge_priority__(rstp); > - > - /* [17.13] */ > - if (rstp->ports_count > 0){ > - LIST_FOR_EACH (p, node, &rstp->ports) { > - p->selected = false; > - p->reselect = true; > - } > - } > - rstp->changes = true; > - updt_roles_tree(rstp); > ovs_mutex_unlock(&mutex); > } > } > -- > 1.7.10.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev