+++ /dev/null
-Index: qemu-kvm-dev/qapi-schema.json
-===================================================================
---- qemu-kvm-dev.orig/qapi-schema.json
-+++ qemu-kvm-dev/qapi-schema.json
-@@ -416,6 +416,7 @@
- { 'command': 'backup', 'data': { 'backup-file': 'str',
- '*format': 'BackupFormat',
- '*config-file': 'str',
-+ '*firewall-file': 'str',
- '*devlist': 'str', '*speed': 'int' },
- 'returns': 'UuidInfo' }
-
-Index: qemu-kvm-dev/qmp-commands.hx
-===================================================================
---- qemu-kvm-dev.orig/qmp-commands.hx
-+++ qemu-kvm-dev/qmp-commands.hx
-@@ -1204,7 +1204,7 @@ EQMP
-
- {
- .name = "backup",
-- .args_type = "backup-file:s,format:s?,config-file:F?,speed:o?,devlist:s?",
-+ .args_type = "backup-file:s,format:s?,config-file:F?,firewall-file:F?,speed:o?,devlist:s?",
- .mhandler.cmd_new = qmp_marshal_input_backup,
- },
-
-Index: qemu-kvm-dev/blockdev.c
-===================================================================
---- qemu-kvm-dev.orig/blockdev.c
-+++ qemu-kvm-dev/blockdev.c
-@@ -2457,6 +2457,44 @@ void qmp_backup_cancel(Error **errp)
- }
- }
-
-+static int config_to_vma(const char *file, BackupFormat format,
-+ const char *backup_dir, VmaWriter *vmaw,
-+ Error **errp)
-+{
-+ char *cdata = NULL;
-+ gsize clen = 0;
-+ GError *err = NULL;
-+ if (!g_file_get_contents(file, &cdata, &clen, &err)) {
-+ error_setg(errp, "unable to read file '%s'", file);
-+ return 1;
-+ }
-+
-+ char *basename = g_path_get_basename(file);
-+
-+ if (format == BACKUP_FORMAT_VMA) {
-+ if (vma_writer_add_config(vmaw, basename, cdata, clen) != 0) {
-+ error_setg(errp, "unable to add %s config data to vma archive", file);
-+ g_free(cdata);
-+ g_free(basename);
-+ return 1;
-+ }
-+ } else if (format == BACKUP_FORMAT_DIR) {
-+ char config_path[PATH_MAX];
-+ snprintf(config_path, PATH_MAX, "%s/%s", backup_dir, basename);
-+ if (!g_file_set_contents(config_path, cdata, clen, &err)) {
-+ error_setg(errp, "unable to write config file '%s'", config_path);
-+ g_free(cdata);
-+ g_free(basename);
-+ return 1;
-+ }
-+ }
-+
-+ g_free(basename);
-+ g_free(cdata);
-+
-+ return 0;
-+}
-+
- static void pvebackup_run_next_job(void)
- {
- GList *l = backup_state.di_list;
-@@ -2483,6 +2521,7 @@ static void pvebackup_run_next_job(void)
- UuidInfo *qmp_backup(const char *backup_file, bool has_format,
- BackupFormat format,
- bool has_config_file, const char *config_file,
-+ bool has_firewall_file, const char *firewall_file,
- bool has_devlist, const char *devlist,
- bool has_speed, int64_t speed, Error **errp)
- {
-@@ -2635,38 +2674,17 @@ UuidInfo *qmp_backup(const char *backup_
-
- /* add configuration file to archive */
- if (has_config_file) {
-- char *cdata = NULL;
-- gsize clen = 0;
-- GError *err = NULL;
-- if (!g_file_get_contents(config_file, &cdata, &clen, &err)) {
-- error_setg(errp, "unable to read file '%s'", config_file);
-- goto err;
-- }
--
-- char *basename = g_path_get_basename(config_file);
--
-- if (format == BACKUP_FORMAT_VMA) {
-- if (vma_writer_add_config(vmaw, basename, cdata, clen) != 0) {
-- error_setg(errp, "unable to add config data to vma archive");
-- g_free(cdata);
-- g_free(basename);
-- goto err;
-- }
-- } else if (format == BACKUP_FORMAT_DIR) {
-- char config_path[PATH_MAX];
-- snprintf(config_path, PATH_MAX, "%s/%s", backup_dir, basename);
-- if (!g_file_set_contents(config_path, cdata, clen, &err)) {
-- error_setg(errp, "unable to write config file '%s'", config_path);
-- g_free(cdata);
-- g_free(basename);
-- goto err;
-- }
-- }
--
-- g_free(basename);
-- g_free(cdata);
-+ if(config_to_vma(config_file, format, backup_dir, vmaw, errp) != 0) {
-+ goto err;
-+ }
- }
-
-+ /* add firewall file to archive */
-+ if (has_firewall_file) {
-+ if(config_to_vma(firewall_file, format, backup_dir, vmaw, errp) != 0) {
-+ goto err;
-+ }
-+ }
- /* initialize global backup_state now */
-
- backup_state.cancel = false;
-Index: qemu-kvm-dev/hmp.c
-===================================================================
---- qemu-kvm-dev.orig/hmp.c
-+++ qemu-kvm-dev/hmp.c
-@@ -1465,7 +1465,7 @@ void hmp_backup(Monitor *mon, const QDic
- int64_t speed = qdict_get_try_int(qdict, "speed", 0);
-
- qmp_backup(backup_file, true, dir ? BACKUP_FORMAT_DIR : BACKUP_FORMAT_VMA,
-- false, NULL, !!devlist,
-+ false, NULL, false, NULL, !!devlist,
- devlist, qdict_haskey(qdict, "speed"), speed, &error);
-
- hmp_handle_error(mon, &error);