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

Reply via email to