This is v2 patchset for modified 'migrate' QAPI design for migration connection.
Links to previous versions: v1: https://lists.gnu.org/archive/html/qemu-devel/2022-12/msg04339.html Thanks to Daniel, Markus and Dr. David for their valuable insights. v1->v2 changelog: - major improvements in restructuring wire protocol for exec and rdma transport backends. - rdma argument change from [str --> InetSocketAddress] - exec arguemnt change from [str --> list of string] - functions are reshuffled into new files as per the recent migration changes in qemu. Abstract: --------- Current QAPI 'migrate' command design (for initiating a migration stream) contains information regarding different migrate transport mechanism (tcp / unix / exec), dest-host IP address, and binding port number in form of a string. Thus the design does seem to have some design issues. Some of the issues, stated below are: 1. Use of string URIs is a data encoding scheme within a data encoding scheme. QEMU code should directly be able to work with the results from QAPI, without resorting to do a second level of parsing (eg. socket_parse()). 2. For features / parameters related to migration, the migration tunables needs to be defined and updated upfront. For example, 'migrate-set-capability' and 'migrate-set-parameter' is required to enable multifd capability and multifd-number of channels respectively. Instead, 'Multifd-channels' can directly be represented as a single additional parameter to 'migrate' QAPI. 'migrate-set-capability' and 'migrate-set-parameter' commands could be used for runtime tunables that need setting after migration has already started. The current patchset focuses on solving the first problem of multi-level encoding of URIs. The patch defines 'migrate' command as a QAPI discriminated union for the various transport backends (like socket, exec and rdma), and on basis of transport backends, different migration parameters are defined. (uri) string --> (channel) Channel-type Transport-type Migration parameters based on transport type ----------------------------------------------------------------------------- Het Gala (6): migration: moved hmp_split_at_commma() helper func to qapi-util.c file migration: Updated QAPI format for 'migrate' qemu monitor command migration: HMP side changes for modified 'migrate' QAPI design migration: Avoid multiple parsing of uri in migration code flow migration: Modified 'migrate-incoming' QAPI and HMP side changes on the destination interface. migration: Established connection for listener sockets on the dest interface include/monitor/hmp.h | 1 - include/qapi/util.h | 1 + migration/exec.c | 38 ++++++-- migration/exec.h | 6 +- migration/migration-hmp-cmds.c | 113 +++++++++++++++++++++++- migration/migration.c | 144 +++++++++++++++++++++++-------- migration/rdma.c | 39 +++------ migration/rdma.h | 5 +- migration/socket.c | 37 ++------ migration/socket.h | 5 +- monitor/hmp-cmds.c | 19 ---- net/net-hmp-cmds.c | 2 +- qapi/migration.json | 153 ++++++++++++++++++++++++++++++++- qapi/qapi-util.c | 19 ++++ softmmu/vl.c | 2 +- stats/stats-hmp-cmds.c | 2 +- 16 files changed, 457 insertions(+), 129 deletions(-) -- 2.22.3