I posted the fix to the mailing list.  The patch now include a unit
test to cover this bug.
https://mail.openvswitch.org/pipermail/ovs-dev/2017-May/332362.html

On Thu, May 11, 2017 at 1:16 PM, Andy Zhou <[email protected]> wrote:
> On Thu, May 11, 2017 at 2:42 AM, Tulio Ribeiro
> <[email protected]> wrote:
>> Hi Andy,
>>
>> I did the patch but now the command $sudo ovs-vsctl add-br s1 stuck (the
>> bridge is added but the command does not return).
>>
>> The command sudo ovs-vsctl set-controller s1 tcp:192.168.1.215:6653 do not
>> return as well.
>>
>> The role of a bridge is not defined, which means, the initial role is empty,
>> but should be "other".
>
> Is ovs-vswitchd still running in your system? The change should not affect how
> the first command works any ways. I just tested the change locally at
> it seems to work.
>
>>
>> Regards.
>>
>> Att,
>>
>> Tulio Ribeiro - LaSIGE.
>>
>> On 05/10/2017 11:27 PM, Andy Zhou wrote:
>>>
>>> On Wed, May 10, 2017 at 11:40 AM, Tulio Ribeiro
>>> <[email protected]> wrote:
>>>>
>>>> Hi guys, sorry to bother you again and send this direct message, but I
>>>> did a
>>>> test without using Mininet, and the problem/behavior persists.
>>>>
>>>> Could someone try to test this, please?
>>>> Thanks a lot in advance.
>>>
>>> Thanks for reporting, I think it is a bug that triggered by having the
>>> same controller
>>> connection settings in multiple bridges, as shown in your example.
>>>
>>> Do you mind try the fix below and let me know if it helps?  I did not
>>> test beyond compiling it.
>>>
>>>
>>> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
>>> index 31203d1ec232..5d13a1712168 100644
>>> --- a/vswitchd/bridge.c
>>> +++ b/vswitchd/bridge.c
>>> @@ -2704,34 +2704,31 @@ static void
>>>   refresh_controller_status(void)
>>>   {
>>>       struct bridge *br;
>>> -    struct shash info;
>>> -    const struct ovsrec_controller *cfg;
>>> -
>>> -    shash_init(&info);
>>>
>>>       /* Accumulate status for controllers on all bridges. */
>>>       HMAP_FOR_EACH (br, node, &all_bridges) {
>>> +        struct shash info = SHASH_INITIALIZER(&info);
>>>           ofproto_get_ofproto_controller_info(br->ofproto, &info);
>>> -    }
>>>
>>> -    /* Update each controller in the database with current status. */
>>> -    OVSREC_CONTROLLER_FOR_EACH(cfg, idl) {
>>> -        struct ofproto_controller_info *cinfo =
>>> -            shash_find_data(&info, cfg->target);
>>> +        /* Update each controller of the bridge in the database with
>>> +         * current status. */
>>> +        struct ovsrec_controller **controllers;
>>> +        size_t n_controllers = bridge_get_controllers(br, &controllers);
>>> +        size_t i;
>>> +        for (i = 0; i < n_controllers; i++) {
>>> +            struct ovsrec_controller *cfg = controllers[i];
>>> +            struct ofproto_controller_info *cinfo =
>>> +                shash_find_data(&info, cfg->target);
>>>
>>> -        if (cinfo) {
>>> +            ovs_assert(cinfo);
>>>               ovsrec_controller_set_is_connected(cfg,
>>> cinfo->is_connected);
>>>               ovsrec_controller_set_role(cfg,
>>> ofp12_controller_role_to_str(
>>> -                                           cinfo->role));
>>> +                    cinfo->role));
>>>               ovsrec_controller_set_status(cfg, &cinfo->pairs);
>>> -        } else {
>>> -            ovsrec_controller_set_is_connected(cfg, false);
>>> -            ovsrec_controller_set_role(cfg, NULL);
>>> -            ovsrec_controller_set_status(cfg, NULL);
>>>           }
>>> -    }
>>>
>>> -    ofproto_free_ofproto_controller_info(&info);
>>> +        ofproto_free_ofproto_controller_info(&info);
>>> +    }
>>>   }
>>
>>
_______________________________________________
discuss mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

Reply via email to