def add_bridges_vlans_range(context, begin, end, ifname):
    try:
        begin = int(begin)
        end = int(end)
        assert begin > 0, f"invalid range: begin is not positive integer: {begin}"
        assert end > 0, f"invalid range: end is not positive integer: {end}"
        assert begin <= end, f"invalid range: begin is not less than end: {begin} > {end}"
    except Exception:
        assert False, f"begin and end must be positive integers: {begin}, {end}"

    vlan_range = [f"{ifname}.{id}" for id in range(begin, end + 1)]
    vlan_range += [f"br{id}" for id in range(begin, end + 1)]
    context.vlan_range = getattr(context, "vlan_range", [])
    context.vlan_range += vlan_range

    from nmci.util import GLib, NM
    nm_client = NM.Client.new(None)
    result = {}

    def _add_connection_cb(cl, async_result, user_data):
        try:
            cl.add_connection_finish(async_result)
        except Exception as e:
            result['error'] = e
        if user_data is not None:
            user_data.quit()

    for id in range(begin, end + 1):

        main_loop = GLib.MainLoop()
        con = NM.SimpleConnection.new()
        uuid = NM.utils_uuid_generate()
        s_con = NM.SettingConnection(type="bridge", id=f"br{id}", uuid=uuid)
        s_con.set_property(NM.SETTING_CONNECTION_INTERFACE_NAME, f"br{id}")
        s_bridge = NM.SettingBridge.new()
        s_ip4 = NM.SettingIP4Config.new()
        s_ip4.set_property(NM.SETTING_IP_CONFIG_METHOD, "disabled")
        s_ip6 = NM.SettingIP6Config.new()
        s_ip6.set_property(NM.SETTING_IP_CONFIG_METHOD, "disabled")
        con.add_setting(s_con)
        con.add_setting(s_bridge)
        con.add_setting(s_ip4)
        con.add_setting(s_ip6)
        nm_client.add_connection_async(con, True, None, _add_connection_cb,
                                       main_loop)
        main_loop.run()

        main_loop = GLib.MainLoop()
        con = NM.SimpleConnection.new()
        uuid = NM.utils_uuid_generate()
        s_con = NM.SettingConnection(type="vlan",
                                     id=f"{ifname}.{id}",
                                     uuid=uuid)
        s_con.set_property(NM.SETTING_CONNECTION_INTERFACE_NAME,
                           f"{ifname}.{id}")
        s_con.set_property(NM.SETTING_CONNECTION_SLAVE_TYPE, "bridge")
        s_con.set_property(NM.SETTING_CONNECTION_MASTER, f"br{id}")
        s_vlan = NM.SettingVlan(id=id, parent=ifname)
        con.add_setting(s_con)
        con.add_setting(s_vlan)
        nm_client.add_connection_async(con, True, None, _add_connection_cb,
                                       main_loop)
        main_loop.run()

        assert 'error' not in result, \
            'add connection %s failed: %s' % (result['error'])