On Sep 9, 2014, at 3:53 AM, Daniele Venturino <venturino.dani...@gmail.com> 
wrote:

> 
> Thanks for the review!
> It would be nice to have an Acked-by from you to the series. However, I plan 
> to squash trivial CodingStyle fixes in before pushing the series to master. 
> Also, I’ll add a News item stating that experimental RSTP is added, and more 
> compliance and interoperability testing is needed.
> Responses below,
>   Jarno
> 
> Ok. I sent my acks.

Thanks!

> 
> I did some minor changes from June to August, that you can see here: 
> https://github.com/M3S/ovs-rstp/compare/b946221...c910081
> 
> About the compliance and interoperability testing, I've been working with an 
> IXIA validation software for a couple of weeks now, and I already have some 
> patches.
> I'm still solving some problems and I expect to have some more fixes. This 
> should take a couple of weeks to obtain a compliant version, so maybe it 
> would be better to wait for a compliant version of the protocol before 
> merging it to the master. Anyway, if you still want to merge it and mark it 
> as experimental is still fine by me, since I'll be able to rebase my patches 
> on your version.
> 

Nice to hear about the IXIA validation work. I’ll merge the series to master 
soon, so that we have less different versions around.

> 
> On Sep 3, 2014, at 7:44 AM, Daniele Venturino <venturino.dani...@gmail.com> 
> wrote:
> I looked and applied the patches. They’re good to me, I just have some notes 
> on patch 13/18 and 16/18.
> 

(snip)

> +    rstp_set_bridge_ageing_time__(rstp, RSTP_DEFAULT_AGEING_TIME);
> +    rstp_set_bridge_forward_delay__(rstp, RSTP_DEFAULT_BRIDGE_FORWARD_DELAY);
> +    rstp_set_bridge_hello_time__(rstp);
> +    rstp_set_bridge_max_age__(rstp, RSTP_DEFAULT_BRIDGE_MAX_AGE);
> +    rstp_set_bridge_migrate_time__(rstp);
> +    rstp_set_bridge_transmit_hold_count__(rstp,
> +                                          RSTP_DEFAULT_TRANSMIT_HOLD_COUNT);
> +    rstp_set_bridge_times__(rstp, RSTP_DEFAULT_BRIDGE_FORWARD_DELAY,
> +                            RSTP_BRIDGE_HELLO_TIME,
> +                            RSTP_DEFAULT_BRIDGE_MAX_AGE, 0);
> 
> These setters are the same in rstp_create() and reinitialize_rstp__(). We 
> could define a funcion like rstp_initialize_port_defaults__() for the bridge.
>  
> I will look into this.

Later.

(snip)

>  xlate_xport_set(struct xport *xport, odp_port_t odp_port,
>                  const struct netdev *netdev, const struct cfm *cfm,
> -                const struct bfd *bfd, int stp_port_no, int rstp_port_no,
> +                const struct bfd *bfd, int stp_port_no,
> +                const struct rstp_port* rstp_port,
>                  enum ofputil_port_config config, enum ofputil_port_state 
> state,
>                  bool is_tunnel, bool may_enable)
>  {
>      xport->config = config;
>      xport->state = state;
>      xport->stp_port_no = stp_port_no;
> -    xport->rstp_port_no = rstp_port_no;
> I get a segfault when removing a port from a bridge. I don't if I add here 
> this line:
> xport->rstp_port = rstp_port;
> 
> I don’t seem to be able to reproduce the segfault. I tried this by adding 
> ovs-vsctl del-br and del-port commands to the new test cases, and they 
> succeed just fine.
> The code right below will set the rstp_port member, if the new value is 
> different from the old value. So all the line you added above does is 
> circumvent the unref of the old pointer, and the ref of the new pointer. I 
> see that I missed the unref in xlate_xport_remove():
> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> index dd9536c..425b171 100644
> --- a/ofproto/ofproto-dpif-xlate.c
> +++ b/ofproto/ofproto-dpif-xlate.c
> @@ -932,6 +932,7 @@ xlate_xport_remove(struct xlate_cfg *xcfg, struct xport 
> *xport)
>      hmap_remove(&xport->xbridge->xports, &xport->ofp_node);
>  
>      netdev_close(xport->netdev);
> +    rstp_port_unref(xport->rstp_port);
>      cfm_unref(xport->cfm);
>      bfd_unref(xport->bfd);
>      free(xport);
> Could you check if this resolves the segfault you get?
> 
> It appears to be solved.

Good :-)

>  
>> @@ -108,9 +121,9 @@  process_received_bpdu(struct rstp_port *p, const void 
>> *bpdu, size_t bpdu_size)
>>         /* Each RSTP port poits back to struct rstp without holding a
>>  +    rstp_set_bridge_priority__(rstp, RSTP_DEFAULT_PRIORITY);
>> +static void
>> static void
>> 
>> 
>>      xport->may_enable = may_enable;
>>      xport->odp_port = odp_port;
>> +    if (xport->rstp_port != rstp_port) {
>> +        rstp_port_unref(xport->rstp_port);
>> +        xport->rstp_port = rstp_port_ref(rstp_port);
>> +    }
>> @@ -3133,16 +3088,15 @@  port_run(struct ofport_dpif *ofport)
>>      if (ofport->may_enable != enable) {
>>          struct ofproto_dpif *ofproto = 
>> ofproto_dpif_cast(ofport->up.ofproto);
>> -        ofproto->backer->need_revalidate = REV_PORT_TOGGLED;
>> -    }
>> -    ofport->may_enable = enable;
>> +        ofproto->backer->need_revalidate = REV_PORT_TOGGLED;
>> -    if (ofport->rstp_port) {
>> -        if (rstp_port_get_mac_operational(ofport->rstp_port) != enable) {
>> +        if (ofport->rstp_port) {
>>              rstp_port_set_mac_operational(ofport->rstp_port, enable);
>>          }
>>      }
>> +
>> +    ofport->may_enable = enable;
>>  }
>> rstp_port_set_mac_operational(ofport->rstp_port, enable) should be outside  
>> if (ofport->may_enable != enable) otherwise ports remain disabled when added.
>> I decided to initialize the of port->may_enable to false instead.
>>      xport->is_tunnel = is_tunnel;
> 
> I applied this and have the impression that this is ok if ports are added to 
> a bridge after rstp is turned on. Otherwise, if a bridge already has some 
> ports and rstp is enabled, ports remain disabled.

I changed the test case at the end of tests/rstp.at to exercise this, and could 
not see what you expected. Maybe you check this out when the code is merged to 
master?

  Jarno


_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to