Features/QMP/Asynchronous QMP-Shell

From QEMU
Revision as of 07:43, 2 June 2021 by Niteesh.gs (talk | contribs)

Asynchronous QMP-Shell

Introduction

The aim is to build an asynchronous Text User Interface(TUI) for issuing and receiving QEMU Monitor Protocol (QMP) commands from a running QEMU instance. Currently, this is done using some standard tools like telnet, socat, and a primitive interface from QEMU called qmp-shell. The qmp-shell is a primitive synchronous interface written in python, being a synchronous interface it lacks support for asynchronous events. It requires the user to send an empty response to retrieve all the asynchronous events. This project aims to replace the qmp-shell with a more modern TUI interface that is asynchronous and provides improvised features compared to the existing interfaces.

Feature authors

  • Mentor: John Snow
  • GSoC Student: Niteesh Babu G S

Detailed description

QMP (QEMU Machine Protocol) is an API provided by QEMU to allow applications to operate a running QEMU instance. QMP is a JSON based protocol and features the following

  • Lightweight, text-based, easy to parse data format
  • Asynchronous messages support (ie. events)
  • Capabilities Negotiation

QMP can be started on a number of interfaces. This makes it flexible for applications to connect to. The interfaces include UNIX sockets, TCP sockets, and STDIO. Some of the interfaces used by the developers to connect include socat, telnet and qmp-shell. The qmp-shell is a simple python interface that has a basic understanding of the protocol provides little more features compared to the standard tools like socat and telnet. Its features include simple command completion, readline features, and a simple syntax checker. Some of the shortcomings of this tool are as follows

  • Synchronous: It cannot display the asynchronous event messages from the server in realtime.
  • No syntax highlighting
  • Lack of documentation: The syntax of the shell is not well documented.
  • Lacks Notifications: The UI does not notify the status of the connection. So in case of a sudden connection loss the user is not informed until a new command is issued.

The aim of this project is to build a versatile TUI interface that can provide all the lacking features of qmp-shell. This will replace the qmp-shell and will one of the major tools for issuing QMP commands. The initial goal is to build a TUI that can connect to QEMU and issue QMP commands, but the long-term goal is to augment this interface with more features than just issuing commands.