Assuming this is a good commit message: “If the Unknown value of the Port Role parameter is received, the state machines should treat the RST BPDU as if it were a Configuration BPDU.”
Also, I think this is more readable with this incremental: diff --git a/lib/rstp-state-machines.c b/lib/rstp-state-machines.c index ade2d61..f702d53 100644 --- a/lib/rstp-state-machines.c +++ b/lib/rstp-state-machines.c @@ -105,11 +105,12 @@ static int topology_change_sm(struct rstp_port *) /* port_timers_sm() not defined as a state machine */ void -process_received_bpdu__(struct rstp_port *p, const void *bpdu, +process_received_bpdu__(struct rstp_port *p, const void *bpdu_, size_t bpdu_size) OVS_REQUIRES(rstp_mutex) { - struct rstp *rstp = p->rstp; + struct rstp *rstp = p->rstp; + struct rstp_bpdu *bpdu = (struct rstp_bpdu *)bpdu_; if (!p->port_enabled) { return; @@ -117,18 +118,20 @@ process_received_bpdu__(struct rstp_port *p, const void *bpdu, if (p->rcvd_bpdu) { return; } + /* [9.2.9 Encoding of Port Role values] - * NOTE.If the Unknown value of the Port Role parameter is received, the + * NOTE. If the Unknown value of the Port Role parameter is received, the * state machines will effectively treat the RST BPDU as if it were a * Configuration BPDU. */ - uint8_t role = ((((struct rstp_bpdu *)bpdu)->flags) & ROLE_FLAG_MASK) - >> ROLE_FLAG_SHIFT; - if (role == PORT_UNKN && - ((struct rstp_bpdu *)bpdu)->bpdu_type == RAPID_SPANNING_TREE_BPDU) - { - ((struct rstp_bpdu *)bpdu)->bpdu_type = CONFIGURATION_BPDU; + if (bpdu->bpdu_type == RAPID_SPANNING_TREE_BPDU) { + uint8_t role = (bpdu->flags & ROLE_FLAG_MASK) >> ROLE_FLAG_SHIFT; + + if (role == PORT_UNKN) { + bpdu->bpdu_type = CONFIGURATION_BPDU; + } } + if (validate_received_bpdu(p, bpdu, bpdu_size) == 0) { p->rcvd_bpdu = true; p->rx_rstp_bpdu_cnt++; Acked-by: Jarno Rajahalme <jrajaha...@nicira.com> On Nov 6, 2014, at 7:31 AM, Daniele Venturino <daniele.ventur...@m3s.it> wrote: > Signed-off-by: Daniele Venturino <daniele.ventur...@m3s.it> > --- > lib/rstp-state-machines.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/lib/rstp-state-machines.c b/lib/rstp-state-machines.c > index e03f720..ade2d61 100644 > --- a/lib/rstp-state-machines.c > +++ b/lib/rstp-state-machines.c > @@ -117,6 +117,18 @@ process_received_bpdu__(struct rstp_port *p, const void > *bpdu, > if (p->rcvd_bpdu) { > return; > } > + /* [9.2.9 Encoding of Port Role values] > + * NOTE.If the Unknown value of the Port Role parameter is received, the > + * state machines will effectively treat the RST BPDU as if it were a > + * Configuration BPDU. > + */ > + uint8_t role = ((((struct rstp_bpdu *)bpdu)->flags) & ROLE_FLAG_MASK) > + >> ROLE_FLAG_SHIFT; > + if (role == PORT_UNKN && > + ((struct rstp_bpdu *)bpdu)->bpdu_type == > RAPID_SPANNING_TREE_BPDU) > + { > + ((struct rstp_bpdu *)bpdu)->bpdu_type = CONFIGURATION_BPDU; > + } > if (validate_received_bpdu(p, bpdu, bpdu_size) == 0) { > p->rcvd_bpdu = true; > p->rx_rstp_bpdu_cnt++; > -- > 1.8.1.2 > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev