[ovs-discuss] Possible issue/bug at Open vSwitch and ovsdb.

Tulio Ribeiro tribeiro at lasige.di.fc.ul.pt
Thu May 11 09:42:31 UTC 2017


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

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
> <tribeiro at lasige.di.fc.ul.pt> 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);
> +    }
>   }



More information about the discuss mailing list