Il giorno 09/set/2014, alle ore 20:07, Jarno Rajahalme <jrajaha...@nicira.com> 
ha scritto:

> 
> 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.

Thanks to you for your reviews! I’ll let you have my other patches soon.

> 
>> 
>> 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?

I’ll test the merged version as soon as I can.

> 
>   Jarno
> 
> 

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

Reply via email to