* [PATCH V4 1/8] COLO-Proxy: Add remus command to open userspace proxy
2017-03-06 2:59 [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Zhang Chen
@ 2017-03-06 2:59 ` Zhang Chen
2017-03-14 11:23 ` Wei Liu
2017-03-06 2:59 ` [PATCH V4 2/8] COLO-Proxy: Setup userspace colo-proxy on primary side Zhang Chen
` (7 subsequent siblings)
8 siblings, 1 reply; 24+ messages in thread
From: Zhang Chen @ 2017-03-06 2:59 UTC (permalink / raw)
To: Xen devel, Wei Liu, Ian Jackson
Cc: Zhang Chen, Li Zhijian, eddie dong, Yang Hongyang, Bian Naimeng
Add remus '-p' to enable userspace colo proxy(in qemu).
Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
---
docs/man/xl.pod.1.in | 5 +++++
tools/libxl/libxl_colo.h | 5 +++++
tools/libxl/libxl_colo_save.c | 2 ++
tools/libxl/libxl_types.idl | 17 +++++++++--------
tools/xl/xl_cmdtable.c | 3 ++-
tools/xl/xl_migrate.c | 13 ++++++++++++-
6 files changed, 35 insertions(+), 10 deletions(-)
diff --git a/docs/man/xl.pod.1.in b/docs/man/xl.pod.1.in
index 7caed08..78bf884 100644
--- a/docs/man/xl.pod.1.in
+++ b/docs/man/xl.pod.1.in
@@ -563,6 +563,11 @@ Disable disk replication. Requires enabling unsafe mode.
Enable COLO HA. This conflicts with B<-i> and B<-b>, and memory
checkpoint compression must be disabled.
+=item B<-p>
+
+Use userspace COLO Proxy. This option must be used in conjunction
+with B<-c>.
+
=back
=item B<pause> I<domain-id>
diff --git a/tools/libxl/libxl_colo.h b/tools/libxl/libxl_colo.h
index 682275c..4746d8c 100644
--- a/tools/libxl/libxl_colo.h
+++ b/tools/libxl/libxl_colo.h
@@ -64,6 +64,11 @@ struct libxl__colo_proxy_state {
int sock_fd;
int index;
+ /*
+ * Private, True means use userspace colo proxy
+ * False means use kernel colo proxy.
+ */
+ bool is_userspace_proxy;
};
struct libxl__colo_save_state {
diff --git a/tools/libxl/libxl_colo_save.c b/tools/libxl/libxl_colo_save.c
index 6277770..eb8336c 100644
--- a/tools/libxl/libxl_colo_save.c
+++ b/tools/libxl/libxl_colo_save.c
@@ -101,6 +101,8 @@ void libxl__colo_save_setup(libxl__egc *egc, libxl__colo_save_state *css)
css->qdisk_setuped = false;
css->qdisk_used = false;
libxl__ev_child_init(&css->child);
+ css->cps.is_userspace_proxy =
+ libxl_defbool_val(dss->remus->userspace_colo_proxy);
if (dss->remus->netbufscript)
css->colo_proxy_script = libxl__strdup(gc, dss->remus->netbufscript);
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index a612d1f..1bd2057 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -844,14 +844,15 @@ libxl_sched_credit2_params = Struct("sched_credit2_params", [
], dispose_fn=None)
libxl_domain_remus_info = Struct("domain_remus_info",[
- ("interval", integer),
- ("allow_unsafe", libxl_defbool),
- ("blackhole", libxl_defbool),
- ("compression", libxl_defbool),
- ("netbuf", libxl_defbool),
- ("netbufscript", string),
- ("diskbuf", libxl_defbool),
- ("colo", libxl_defbool)
+ ("interval", integer),
+ ("allow_unsafe", libxl_defbool),
+ ("blackhole", libxl_defbool),
+ ("compression", libxl_defbool),
+ ("netbuf", libxl_defbool),
+ ("netbufscript", string),
+ ("diskbuf", libxl_defbool),
+ ("colo", libxl_defbool),
+ ("userspace_colo_proxy", libxl_defbool)
])
libxl_event_type = Enumeration("event_type", [
diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c
index 1219b33..7d97811 100644
--- a/tools/xl/xl_cmdtable.c
+++ b/tools/xl/xl_cmdtable.c
@@ -506,7 +506,8 @@ struct cmd_spec cmd_table[] = {
"-n Disable network output buffering. Works only in unsafe mode.\n"
"-d Disable disk replication. Works only in unsafe mode.\n"
"-c Enable COLO HA. It is conflict with -i and -b, and memory\n"
- " checkpoint must be disabled"
+ " checkpoint must be disabled.\n"
+ "-p Use COLO userspace proxy."
},
#endif
{ "devd",
diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c
index 28fb823..9a267cc 100644
--- a/tools/xl/xl_migrate.c
+++ b/tools/xl/xl_migrate.c
@@ -609,7 +609,7 @@ int main_remus(int argc, char **argv)
memset(&r_info, 0, sizeof(libxl_domain_remus_info));
- SWITCH_FOREACH_OPT(opt, "Fbundi:s:N:ec", NULL, "remus", 2) {
+ SWITCH_FOREACH_OPT(opt, "Fbundi:s:N:ecp", NULL, "remus", 2) {
case 'i':
r_info.interval = atoi(optarg);
break;
@@ -639,6 +639,9 @@ int main_remus(int argc, char **argv)
break;
case 'c':
libxl_defbool_set(&r_info.colo, true);
+ break;
+ case 'p':
+ libxl_defbool_set(&r_info.userspace_colo_proxy, true);
}
domid = find_domain(argv[optind]);
@@ -647,9 +650,17 @@ int main_remus(int argc, char **argv)
/* Defaults */
libxl_defbool_setdefault(&r_info.blackhole, false);
libxl_defbool_setdefault(&r_info.colo, false);
+ libxl_defbool_setdefault(&r_info.userspace_colo_proxy, false);
+
if (!libxl_defbool_val(r_info.colo) && !r_info.interval)
r_info.interval = 200;
+ if (libxl_defbool_val(r_info.userspace_colo_proxy) &&
+ !libxl_defbool_val(r_info.colo)) {
+ fprintf(stderr, "Option -p must be used in conjunction with -c");
+ exit(-1);
+ }
+
if (libxl_defbool_val(r_info.colo)) {
if (r_info.interval || libxl_defbool_val(r_info.blackhole) ||
!libxl_defbool_is_default(r_info.netbuf) ||
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH V4 1/8] COLO-Proxy: Add remus command to open userspace proxy
2017-03-06 2:59 ` [PATCH V4 1/8] COLO-Proxy: Add remus command to open userspace proxy Zhang Chen
@ 2017-03-14 11:23 ` Wei Liu
0 siblings, 0 replies; 24+ messages in thread
From: Wei Liu @ 2017-03-14 11:23 UTC (permalink / raw)
To: Zhang Chen
Cc: Wei Liu, Li Zhijian, Ian Jackson, eddie dong, Yang Hongyang,
Xen devel, Bian Naimeng
On Mon, Mar 06, 2017 at 10:59:19AM +0800, Zhang Chen wrote:
> Add remus '-p' to enable userspace colo proxy(in qemu).
>
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH V4 2/8] COLO-Proxy: Setup userspace colo-proxy on primary side
2017-03-06 2:59 [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Zhang Chen
2017-03-06 2:59 ` [PATCH V4 1/8] COLO-Proxy: Add remus command to open userspace proxy Zhang Chen
@ 2017-03-06 2:59 ` Zhang Chen
2017-03-14 11:24 ` Wei Liu
2017-03-06 2:59 ` [PATCH V4 3/8] COLO-Proxy: Setup userspace colo-proxy on secondary side Zhang Chen
` (6 subsequent siblings)
8 siblings, 1 reply; 24+ messages in thread
From: Zhang Chen @ 2017-03-06 2:59 UTC (permalink / raw)
To: Xen devel, Wei Liu, Ian Jackson
Cc: Zhang Chen, Li Zhijian, eddie dong, Yang Hongyang, Bian Naimeng
In this patch we close kernel COLO-Proxy on primary side.
Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
---
tools/libxl/libxl_colo_proxy.c | 31 +++++++++++++++++++++++++++++++
tools/libxl/libxl_colo_save.c | 9 +++++++--
2 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/tools/libxl/libxl_colo_proxy.c b/tools/libxl/libxl_colo_proxy.c
index 0983f42..ec76e37 100644
--- a/tools/libxl/libxl_colo_proxy.c
+++ b/tools/libxl/libxl_colo_proxy.c
@@ -152,6 +152,10 @@ int colo_proxy_setup(libxl__colo_proxy_state *cps)
STATE_AO_GC(cps->ao);
+ /* If enable userspace proxy mode, we don't need setup kernel proxy */
+ if (cps->is_userspace_proxy)
+ return 0;
+
skfd = socket(PF_NETLINK, SOCK_RAW, NETLINK_COLO);
if (skfd < 0) {
LOGD(ERROR, ao->domid, "can not create a netlink socket: %s", strerror(errno));
@@ -222,6 +226,13 @@ out:
void colo_proxy_teardown(libxl__colo_proxy_state *cps)
{
+ /*
+ * If enable userspace proxy mode,
+ * we don't need teardown kernel proxy
+ */
+ if (cps->is_userspace_proxy)
+ return;
+
if (cps->sock_fd >= 0) {
close(cps->sock_fd);
cps->sock_fd = -1;
@@ -232,6 +243,13 @@ void colo_proxy_teardown(libxl__colo_proxy_state *cps)
void colo_proxy_preresume(libxl__colo_proxy_state *cps)
{
+ /*
+ * If enable userspace proxy mode,
+ * we don't need preresume kernel proxy
+ */
+ if (cps->is_userspace_proxy)
+ return;
+
colo_proxy_send(cps, NULL, 0, COLO_CHECKPOINT);
/* TODO: need to handle if the call fails... */
}
@@ -262,6 +280,19 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
STATE_AO_GC(cps->ao);
+ /*
+ * Enable userspace proxy to periodical checkpoint mode,
+ * sleeping temporarily for colo userspace proxy mode.
+ * then we will use socket recv instead of this usleep.
+ * In other words, we use socket communicate with Qemu
+ * Proxy part(colo-compare), for example, notify checkpoint
+ * event.
+ */
+ if (cps->is_userspace_proxy) {
+ usleep(timeout_us);
+ return 0;
+ }
+
size = colo_proxy_recv(cps, &buff, timeout_us);
/* timeout, return no checkpoint message. */
diff --git a/tools/libxl/libxl_colo_save.c b/tools/libxl/libxl_colo_save.c
index eb8336c..91e3fce 100644
--- a/tools/libxl/libxl_colo_save.c
+++ b/tools/libxl/libxl_colo_save.c
@@ -110,8 +110,13 @@ void libxl__colo_save_setup(libxl__egc *egc, libxl__colo_save_state *css)
css->colo_proxy_script = GCSPRINTF("%s/colo-proxy-setup",
libxl__xen_script_dir_path());
- cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VIF) |
- (1 << LIBXL__DEVICE_KIND_VBD);
+ /* If enable userspace proxy mode, we don't need VIF */
+ if (css->cps.is_userspace_proxy)
+ cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VBD);
+ else
+ cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VIF) |
+ (1 << LIBXL__DEVICE_KIND_VBD);
+
cds->ops = colo_ops;
cds->callback = colo_save_setup_done;
cds->ao = ao;
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH V4 2/8] COLO-Proxy: Setup userspace colo-proxy on primary side
2017-03-06 2:59 ` [PATCH V4 2/8] COLO-Proxy: Setup userspace colo-proxy on primary side Zhang Chen
@ 2017-03-14 11:24 ` Wei Liu
0 siblings, 0 replies; 24+ messages in thread
From: Wei Liu @ 2017-03-14 11:24 UTC (permalink / raw)
To: Zhang Chen
Cc: Wei Liu, Li Zhijian, Ian Jackson, eddie dong, Yang Hongyang,
Xen devel, Bian Naimeng
On Mon, Mar 06, 2017 at 10:59:20AM +0800, Zhang Chen wrote:
> In this patch we close kernel COLO-Proxy on primary side.
>
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH V4 3/8] COLO-Proxy: Setup userspace colo-proxy on secondary side
2017-03-06 2:59 [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Zhang Chen
2017-03-06 2:59 ` [PATCH V4 1/8] COLO-Proxy: Add remus command to open userspace proxy Zhang Chen
2017-03-06 2:59 ` [PATCH V4 2/8] COLO-Proxy: Setup userspace colo-proxy on primary side Zhang Chen
@ 2017-03-06 2:59 ` Zhang Chen
2017-03-14 11:24 ` Wei Liu
2017-03-06 2:59 ` [PATCH V4 4/8] COLO-Proxy: Add primary userspace colo proxy start args Zhang Chen
` (5 subsequent siblings)
8 siblings, 1 reply; 24+ messages in thread
From: Zhang Chen @ 2017-03-06 2:59 UTC (permalink / raw)
To: Xen devel, Wei Liu, Ian Jackson
Cc: Zhang Chen, Li Zhijian, eddie dong, Yang Hongyang, Bian Naimeng
In this patch we add a function to close COLO kernel Proxy on secondary side.
Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
---
tools/libxl/libxl_colo_restore.c | 8 ++++++--
tools/libxl/libxl_create.c | 8 ++++++--
tools/libxl/libxl_types.idl | 1 +
tools/xl/xl.h | 1 +
tools/xl/xl_migrate.c | 15 ++++++++++++---
tools/xl/xl_vmcontrol.c | 2 ++
6 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/tools/libxl/libxl_colo_restore.c b/tools/libxl/libxl_colo_restore.c
index 6a96328..c6d239a 100644
--- a/tools/libxl/libxl_colo_restore.c
+++ b/tools/libxl/libxl_colo_restore.c
@@ -774,8 +774,12 @@ static void colo_setup_checkpoint_devices(libxl__egc *egc,
STATE_AO_GC(crs->ao);
- cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VIF) |
- (1 << LIBXL__DEVICE_KIND_VBD);
+ if (crs->cps.is_userspace_proxy)
+ cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VBD);
+ else
+ cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VIF) |
+ (1 << LIBXL__DEVICE_KIND_VBD);
+
cds->callback = colo_restore_setup_cds_done;
cds->ao = ao;
cds->domid = crs->domid;
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index e741b9a..409945a 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -1633,11 +1633,15 @@ static int do_domain_create(libxl_ctx *ctx, libxl_domain_config *d_config,
cdcs->dcs.domid_soft_reset = INVALID_DOMID;
if (cdcs->dcs.restore_params.checkpointed_stream ==
- LIBXL_CHECKPOINTED_STREAM_COLO)
+ LIBXL_CHECKPOINTED_STREAM_COLO) {
cdcs->dcs.colo_proxy_script =
cdcs->dcs.restore_params.colo_proxy_script;
- else
+ cdcs->dcs.crs.cps.is_userspace_proxy =
+ libxl_defbool_val(cdcs->dcs.restore_params.userspace_colo_proxy);
+ } else {
cdcs->dcs.colo_proxy_script = NULL;
+ cdcs->dcs.crs.cps.is_userspace_proxy = false;
+ }
libxl__ao_progress_gethow(&cdcs->dcs.aop_console_how, aop_console_how);
cdcs->domid_out = domid;
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 1bd2057..89c2c9d 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -390,6 +390,7 @@ libxl_domain_restore_params = Struct("domain_restore_params", [
("checkpointed_stream", integer),
("stream_version", uint32, {'init_val': '1'}),
("colo_proxy_script", string),
+ ("userspace_colo_proxy", libxl_defbool),
])
libxl_sched_params = Struct("sched_params",[
diff --git a/tools/xl/xl.h b/tools/xl/xl.h
index 65b89ce..dc35ec2 100644
--- a/tools/xl/xl.h
+++ b/tools/xl/xl.h
@@ -45,6 +45,7 @@ struct domain_create {
char *extra_config; /* extra config string */
const char *restore_file;
char *colo_proxy_script;
+ bool userspace_colo_proxy;
int migrate_fd; /* -1 means none */
int send_back_fd; /* -1 means none */
char **migration_domname_r; /* from malloc */
diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c
index 9a267cc..65a5a46 100644
--- a/tools/xl/xl_migrate.c
+++ b/tools/xl/xl_migrate.c
@@ -321,7 +321,8 @@ static void migrate_receive(int debug, int daemonize, int monitor,
int pause_after_migration,
int send_fd, int recv_fd,
libxl_checkpointed_stream checkpointed,
- char *colo_proxy_script)
+ char *colo_proxy_script,
+ bool userspace_colo_proxy)
{
uint32_t domid;
int rc, rc2;
@@ -349,6 +350,7 @@ static void migrate_receive(int debug, int daemonize, int monitor,
dom_info.migration_domname_r = &migration_domname;
dom_info.checkpointed_stream = checkpointed;
dom_info.colo_proxy_script = colo_proxy_script;
+ dom_info.userspace_colo_proxy = userspace_colo_proxy;
rc = create_domain(&dom_info);
if (rc < 0) {
@@ -480,11 +482,13 @@ int main_migrate_receive(int argc, char **argv)
int debug = 0, daemonize = 1, monitor = 1, pause_after_migration = 0;
libxl_checkpointed_stream checkpointed = LIBXL_CHECKPOINTED_STREAM_NONE;
int opt;
+ bool userspace_colo_proxy = false;
char *script = NULL;
static struct option opts[] = {
{"colo", 0, 0, 0x100},
/* It is a shame that the management code for disk is not here. */
{"coloft-script", 1, 0, 0x200},
+ {"userspace-colo-proxy", 0, 0, 0x300},
COMMON_LONG_OPTS
};
@@ -508,6 +512,9 @@ int main_migrate_receive(int argc, char **argv)
case 0x200:
script = optarg;
break;
+ case 0x300:
+ userspace_colo_proxy = true;
+ break;
case 'p':
pause_after_migration = 1;
break;
@@ -519,7 +526,7 @@ int main_migrate_receive(int argc, char **argv)
}
migrate_receive(debug, daemonize, monitor, pause_after_migration,
STDOUT_FILENO, STDIN_FILENO,
- checkpointed, script);
+ checkpointed, script, userspace_colo_proxy);
return EXIT_SUCCESS;
}
@@ -700,11 +707,13 @@ int main_remus(int argc, char **argv)
"-r",
daemonize ? "" : " -e");
} else {
- xasprintf(&rune, "exec %s %s xl migrate-receive %s %s %s %s",
+ xasprintf(&rune, "exec %s %s xl migrate-receive %s %s %s %s %s",
ssh_command, host,
"--colo",
r_info.netbufscript ? "--coloft-script" : "",
r_info.netbufscript ? r_info.netbufscript : "",
+ libxl_defbool_val(r_info.userspace_colo_proxy) ?
+ "--userspace-colo-proxy" : "",
daemonize ? "" : " -e");
}
}
diff --git a/tools/xl/xl_vmcontrol.c b/tools/xl/xl_vmcontrol.c
index 9b9d55c..e643878 100644
--- a/tools/xl/xl_vmcontrol.c
+++ b/tools/xl/xl_vmcontrol.c
@@ -881,6 +881,8 @@ start:
params.stream_version =
(hdr.mandatory_flags & XL_MANDATORY_FLAG_STREAMv2) ? 2 : 1;
params.colo_proxy_script = dom_info->colo_proxy_script;
+ libxl_defbool_set(¶ms.userspace_colo_proxy,
+ dom_info->userspace_colo_proxy);
ret = libxl_domain_create_restore(ctx, &d_config,
&domid, restore_fd,
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH V4 3/8] COLO-Proxy: Setup userspace colo-proxy on secondary side
2017-03-06 2:59 ` [PATCH V4 3/8] COLO-Proxy: Setup userspace colo-proxy on secondary side Zhang Chen
@ 2017-03-14 11:24 ` Wei Liu
0 siblings, 0 replies; 24+ messages in thread
From: Wei Liu @ 2017-03-14 11:24 UTC (permalink / raw)
To: Zhang Chen
Cc: Wei Liu, Li Zhijian, Ian Jackson, eddie dong, Yang Hongyang,
Xen devel, Bian Naimeng
On Mon, Mar 06, 2017 at 10:59:21AM +0800, Zhang Chen wrote:
> In this patch we add a function to close COLO kernel Proxy on secondary side.
>
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH V4 4/8] COLO-Proxy: Add primary userspace colo proxy start args
2017-03-06 2:59 [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Zhang Chen
` (2 preceding siblings ...)
2017-03-06 2:59 ` [PATCH V4 3/8] COLO-Proxy: Setup userspace colo-proxy on secondary side Zhang Chen
@ 2017-03-06 2:59 ` Zhang Chen
2017-03-14 11:24 ` Wei Liu
2017-03-06 2:59 ` [PATCH V4 5/8] COLO-Proxy: Add secondary userspace colo-proxy " Zhang Chen
` (4 subsequent siblings)
8 siblings, 1 reply; 24+ messages in thread
From: Zhang Chen @ 2017-03-06 2:59 UTC (permalink / raw)
To: Xen devel, Wei Liu, Ian Jackson
Cc: Zhang Chen, Li Zhijian, eddie dong, Yang Hongyang, Bian Naimeng
Qemu need this args to start userspace colo-proxy.
Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
---
tools/libxl/libxl_dm.c | 98 +++++++++++++++++++++++++++++++++++++++++++++
tools/libxl/libxl_nic.c | 78 ++++++++++++++++++++++++++++++++++++
tools/libxl/libxl_types.idl | 31 +++++++++++++-
tools/xl/xl_parse.c | 58 +++++++++++++++++++++++++++
4 files changed, 264 insertions(+), 1 deletion(-)
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 281058d..abd4edd 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -1244,7 +1244,105 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
nics[i].devid, ifname,
libxl_tapif_script(gc),
libxl_tapif_script(gc)));
+
+ /* Userspace COLO Proxy need this */
+#define APPEND_COLO_SOCK_SERVER(sock_id, sock_ip, sock_port) ({ \
+ if (nics[i].colo_##sock_id && \
+ nics[i].colo_##sock_ip && \
+ nics[i].colo_##sock_port) { \
+ flexarray_append(dm_args, "-chardev"); \
+ flexarray_append(dm_args, \
+ GCSPRINTF("socket,id=%s,host=%s,port=%s,server,nowait", \
+ nics[i].colo_##sock_id, \
+ nics[i].colo_##sock_ip, \
+ nics[i].colo_##sock_port)); \
+ } \
+})
+
+#define APPEND_COLO_SOCK_CLIENT(sock_id, sock_ip, sock_port) ({ \
+ if (nics[i].colo_##sock_id && \
+ nics[i].colo_##sock_ip && \
+ nics[i].colo_##sock_port) { \
+ flexarray_append(dm_args, "-chardev"); \
+ flexarray_append(dm_args, \
+ GCSPRINTF("socket,id=%s,host=%s,port=%s", \
+ nics[i].colo_##sock_id, \
+ nics[i].colo_##sock_ip, \
+ nics[i].colo_##sock_port)); \
+ } \
+})
+
+ if (state->saved_state) {
+ /* secondary colo run */
+ } else {
+ /* primary colo run */
+
+ APPEND_COLO_SOCK_SERVER(sock_mirror_id,
+ sock_mirror_ip,
+ sock_mirror_port);
+
+ APPEND_COLO_SOCK_SERVER(sock_compare_pri_in_id,
+ sock_compare_pri_in_ip,
+ sock_compare_pri_in_port);
+
+ APPEND_COLO_SOCK_SERVER(sock_compare_sec_in_id,
+ sock_compare_sec_in_ip,
+ sock_compare_sec_in_port);
+
+ APPEND_COLO_SOCK_SERVER(sock_redirector0_id,
+ sock_redirector0_ip,
+ sock_redirector0_port);
+
+ APPEND_COLO_SOCK_CLIENT(sock_redirector1_id,
+ sock_redirector1_ip,
+ sock_redirector1_port);
+
+ APPEND_COLO_SOCK_CLIENT(sock_redirector2_id,
+ sock_redirector2_ip,
+ sock_redirector2_port);
+
+ if (nics[i].colo_filter_mirror_queue &&
+ nics[i].colo_filter_mirror_outdev) {
+ flexarray_append(dm_args, "-object");
+ flexarray_append(dm_args,
+ GCSPRINTF("filter-mirror,id=m1,netdev=net%d,queue=%s,outdev=%s",
+ nics[i].devid,
+ nics[i].colo_filter_mirror_queue,
+ nics[i].colo_filter_mirror_outdev));
+ }
+ if (nics[i].colo_filter_redirector0_queue &&
+ nics[i].colo_filter_redirector0_indev) {
+ flexarray_append(dm_args, "-object");
+ flexarray_append(dm_args,
+ GCSPRINTF("filter-redirector,id=r1,netdev=net%d,queue=%s,indev=%s",
+ nics[i].devid,
+ nics[i].colo_filter_redirector0_queue,
+ nics[i].colo_filter_redirector0_indev));
+ }
+ if (nics[i].colo_filter_redirector1_queue &&
+ nics[i].colo_filter_redirector1_outdev) {
+ flexarray_append(dm_args, "-object");
+ flexarray_append(dm_args,
+ GCSPRINTF("filter-redirector,id=r2,netdev=net%d,queue=%s,outdev=%s",
+ nics[i].devid,
+ nics[i].colo_filter_redirector1_queue,
+ nics[i].colo_filter_redirector1_outdev));
+ }
+ if (nics[i].colo_compare_pri_in &&
+ nics[i].colo_compare_sec_in &&
+ nics[i].colo_compare_out) {
+ flexarray_append(dm_args, "-object");
+ flexarray_append(dm_args,
+ GCSPRINTF("colo-compare,id=c1,primary_in=%s,secondary_in=%s,outdev=%s",
+ nics[i].colo_compare_pri_in,
+ nics[i].colo_compare_sec_in,
+ nics[i].colo_compare_out));
+ }
+ }
ioemu_nics++;
+
+#undef APPEND_COLO_SOCK_SERVER
+#undef APPEND_COLO_SOCK_CLIENT
}
}
/* If we have no emulated nics, tell qemu not to create any */
diff --git a/tools/libxl/libxl_nic.c b/tools/libxl/libxl_nic.c
index 61b55ca..7c57bcf 100644
--- a/tools/libxl/libxl_nic.c
+++ b/tools/libxl/libxl_nic.c
@@ -196,6 +196,45 @@ static void libxl__device_nic_add(libxl__egc *egc, uint32_t domid,
flexarray_append(back, nic->coloft_forwarddev);
}
+#define MAYBE_ADD_COLO_ARGS(arg) ({ \
+ if (nic->colo_##arg) { \
+ flexarray_append(back, "colo_"#arg); \
+ flexarray_append(back, nic->colo_##arg); \
+ } \
+})
+
+ MAYBE_ADD_COLO_ARGS(sock_mirror_id);
+ MAYBE_ADD_COLO_ARGS(sock_mirror_ip);
+ MAYBE_ADD_COLO_ARGS(sock_mirror_port);
+ MAYBE_ADD_COLO_ARGS(sock_compare_pri_in_id);
+ MAYBE_ADD_COLO_ARGS(sock_compare_pri_in_ip);
+ MAYBE_ADD_COLO_ARGS(sock_compare_pri_in_port);
+ MAYBE_ADD_COLO_ARGS(sock_compare_sec_in_id);
+ MAYBE_ADD_COLO_ARGS(sock_compare_sec_in_ip);
+ MAYBE_ADD_COLO_ARGS(sock_compare_sec_in_port);
+ MAYBE_ADD_COLO_ARGS(sock_redirector0_id);
+ MAYBE_ADD_COLO_ARGS(sock_redirector0_ip);
+ MAYBE_ADD_COLO_ARGS(sock_redirector0_port);
+ MAYBE_ADD_COLO_ARGS(sock_redirector1_id);
+ MAYBE_ADD_COLO_ARGS(sock_redirector1_ip);
+ MAYBE_ADD_COLO_ARGS(sock_redirector1_port);
+ MAYBE_ADD_COLO_ARGS(sock_redirector2_id);
+ MAYBE_ADD_COLO_ARGS(sock_redirector2_ip);
+ MAYBE_ADD_COLO_ARGS(sock_redirector2_port);
+ MAYBE_ADD_COLO_ARGS(filter_mirror_queue);
+ MAYBE_ADD_COLO_ARGS(filter_mirror_outdev);
+ MAYBE_ADD_COLO_ARGS(filter_redirector0_queue);
+ MAYBE_ADD_COLO_ARGS(filter_redirector0_indev);
+ MAYBE_ADD_COLO_ARGS(filter_redirector0_outdev);
+ MAYBE_ADD_COLO_ARGS(filter_redirector1_queue);
+ MAYBE_ADD_COLO_ARGS(filter_redirector1_indev);
+ MAYBE_ADD_COLO_ARGS(filter_redirector1_outdev);
+ MAYBE_ADD_COLO_ARGS(compare_pri_in);
+ MAYBE_ADD_COLO_ARGS(compare_sec_in);
+ MAYBE_ADD_COLO_ARGS(compare_out);
+
+#undef MAYBE_ADD_COLO_ARGS
+
flexarray_append(back, "mac");
flexarray_append(back,GCSPRINTF(LIBXL_MAC_FMT, LIBXL_MAC_BYTES(nic->mac)));
if (nic->ip) {
@@ -349,6 +388,45 @@ static int libxl__device_nic_from_xenstore(libxl__gc *gc,
(const char **)(&nic->coloft_forwarddev));
if (rc) goto out;
+#define CHECK_COLO_ARGS(arg) ({ \
+ rc = libxl__xs_read_checked(NOGC, XBT_NULL, \
+ GCSPRINTF("%s/colo_"#arg, libxl_path), \
+ (const char **)(&nic->colo_##arg)); \
+ if (rc) goto out; \
+})
+
+ CHECK_COLO_ARGS(sock_mirror_id);
+ CHECK_COLO_ARGS(sock_mirror_ip);
+ CHECK_COLO_ARGS(sock_mirror_port);
+ CHECK_COLO_ARGS(sock_compare_pri_in_id);
+ CHECK_COLO_ARGS(sock_compare_pri_in_ip);
+ CHECK_COLO_ARGS(sock_compare_pri_in_port);
+ CHECK_COLO_ARGS(sock_compare_sec_in_id);
+ CHECK_COLO_ARGS(sock_compare_sec_in_ip);
+ CHECK_COLO_ARGS(sock_compare_sec_in_port);
+ CHECK_COLO_ARGS(sock_redirector0_id);
+ CHECK_COLO_ARGS(sock_redirector0_ip);
+ CHECK_COLO_ARGS(sock_redirector0_port);
+ CHECK_COLO_ARGS(sock_redirector1_id);
+ CHECK_COLO_ARGS(sock_redirector1_ip);
+ CHECK_COLO_ARGS(sock_redirector1_port);
+ CHECK_COLO_ARGS(sock_redirector2_id);
+ CHECK_COLO_ARGS(sock_redirector2_ip);
+ CHECK_COLO_ARGS(sock_redirector2_port);
+ CHECK_COLO_ARGS(filter_mirror_queue);
+ CHECK_COLO_ARGS(filter_mirror_outdev);
+ CHECK_COLO_ARGS(filter_redirector0_queue);
+ CHECK_COLO_ARGS(filter_redirector0_indev);
+ CHECK_COLO_ARGS(filter_redirector0_outdev);
+ CHECK_COLO_ARGS(filter_redirector1_queue);
+ CHECK_COLO_ARGS(filter_redirector1_indev);
+ CHECK_COLO_ARGS(filter_redirector1_outdev);
+ CHECK_COLO_ARGS(compare_pri_in);
+ CHECK_COLO_ARGS(compare_sec_in);
+ CHECK_COLO_ARGS(compare_out);
+
+#undef CHECK_COLO_ARGS
+
/* vif_ioemu nics use the same xenstore entries as vif interfaces */
rc = libxl__xs_read_checked(gc, XBT_NULL,
GCSPRINTF("%s/type", libxl_path), &tmp);
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 89c2c9d..07ce345 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -629,7 +629,36 @@ libxl_device_nic = Struct("device_nic", [
("gatewaydev", string),
# Note that the COLO configuration settings should be considered unstable.
# They may change incompatibly in future versions of Xen.
- ("coloft_forwarddev", string)
+ ("coloft_forwarddev", string),
+ ("colo_sock_mirror_id", string),
+ ("colo_sock_mirror_ip", string),
+ ("colo_sock_mirror_port", string),
+ ("colo_sock_compare_pri_in_id", string),
+ ("colo_sock_compare_pri_in_ip", string),
+ ("colo_sock_compare_pri_in_port", string),
+ ("colo_sock_compare_sec_in_id", string),
+ ("colo_sock_compare_sec_in_ip", string),
+ ("colo_sock_compare_sec_in_port", string),
+ ("colo_sock_redirector0_id", string),
+ ("colo_sock_redirector0_ip", string),
+ ("colo_sock_redirector0_port", string),
+ ("colo_sock_redirector1_id", string),
+ ("colo_sock_redirector1_ip", string),
+ ("colo_sock_redirector1_port", string),
+ ("colo_sock_redirector2_id", string),
+ ("colo_sock_redirector2_ip", string),
+ ("colo_sock_redirector2_port", string),
+ ("colo_filter_mirror_queue", string),
+ ("colo_filter_mirror_outdev", string),
+ ("colo_filter_redirector0_queue", string),
+ ("colo_filter_redirector0_indev", string),
+ ("colo_filter_redirector0_outdev", string),
+ ("colo_filter_redirector1_queue", string),
+ ("colo_filter_redirector1_indev", string),
+ ("colo_filter_redirector1_outdev", string),
+ ("colo_compare_pri_in", string),
+ ("colo_compare_sec_in", string),
+ ("colo_compare_out", string)
])
libxl_device_pci = Struct("device_pci", [
diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
index 1ef0c27..88ef1c6 100644
--- a/tools/xl/xl_parse.c
+++ b/tools/xl/xl_parse.c
@@ -458,6 +458,64 @@ int parse_nic_config(libxl_device_nic *nic, XLU_Config **config, char *token)
parse_vif_rate(config, oparg, nic);
} else if (MATCH_OPTION("forwarddev", token, oparg)) {
replace_string(&nic->coloft_forwarddev, oparg);
+ } else if (MATCH_OPTION("colo_sock_mirror_id", token, oparg)) {
+ replace_string(&nic->colo_sock_mirror_id, oparg);
+ } else if (MATCH_OPTION("colo_sock_mirror_ip", token, oparg)) {
+ replace_string(&nic->colo_sock_mirror_ip, oparg);
+ } else if (MATCH_OPTION("colo_sock_mirror_port", token, oparg)) {
+ replace_string(&nic->colo_sock_mirror_port, oparg);
+ } else if (MATCH_OPTION("colo_sock_compare_sec_in_id", token, oparg)) {
+ replace_string(&nic->colo_sock_compare_sec_in_id, oparg);
+ } else if (MATCH_OPTION("colo_sock_compare_sec_in_ip", token, oparg)) {
+ replace_string(&nic->colo_sock_compare_sec_in_ip, oparg);
+ } else if (MATCH_OPTION("colo_sock_compare_sec_in_port", token, oparg)) {
+ replace_string(&nic->colo_sock_compare_sec_in_port, oparg);
+ } else if (MATCH_OPTION("colo_sock_redirector0_id", token, oparg)) {
+ replace_string(&nic->colo_sock_redirector0_id, oparg);
+ } else if (MATCH_OPTION("colo_sock_redirector0_ip", token, oparg)) {
+ replace_string(&nic->colo_sock_redirector0_ip, oparg);
+ } else if (MATCH_OPTION("colo_sock_redirector0_port", token, oparg)) {
+ replace_string(&nic->colo_sock_redirector0_port, oparg);
+ } else if (MATCH_OPTION("colo_sock_redirector1_id", token, oparg)) {
+ replace_string(&nic->colo_sock_redirector1_id, oparg);
+ } else if (MATCH_OPTION("colo_sock_redirector1_ip", token, oparg)) {
+ replace_string(&nic->colo_sock_redirector1_ip, oparg);
+ } else if (MATCH_OPTION("colo_sock_redirector1_port", token, oparg)) {
+ replace_string(&nic->colo_sock_redirector1_port, oparg);
+ } else if (MATCH_OPTION("colo_sock_redirector2_id", token, oparg)) {
+ replace_string(&nic->colo_sock_redirector2_id, oparg);
+ } else if (MATCH_OPTION("colo_sock_redirector2_ip", token, oparg)) {
+ replace_string(&nic->colo_sock_redirector2_ip, oparg);
+ } else if (MATCH_OPTION("colo_sock_redirector2_port", token, oparg)) {
+ replace_string(&nic->colo_sock_redirector2_port, oparg);
+ } else if (MATCH_OPTION("colo_sock_compare_pri_in_id", token, oparg)) {
+ replace_string(&nic->colo_sock_compare_pri_in_id, oparg);
+ } else if (MATCH_OPTION("colo_sock_compare_pri_in_ip", token, oparg)) {
+ replace_string(&nic->colo_sock_compare_pri_in_ip, oparg);
+ } else if (MATCH_OPTION("colo_sock_compare_pri_in_port", token, oparg)) {
+ replace_string(&nic->colo_sock_compare_pri_in_port, oparg);
+ } else if (MATCH_OPTION("colo_filter_mirror_queue", token, oparg)) {
+ replace_string(&nic->colo_filter_mirror_queue, oparg);
+ } else if (MATCH_OPTION("colo_filter_mirror_outdev", token, oparg)) {
+ replace_string(&nic->colo_filter_mirror_outdev, oparg);
+ } else if (MATCH_OPTION("colo_filter_redirector0_queue", token, oparg)) {
+ replace_string(&nic->colo_filter_redirector0_queue, oparg);
+ } else if (MATCH_OPTION("colo_filter_redirector0_indev", token, oparg)) {
+ replace_string(&nic->colo_filter_redirector0_indev, oparg);
+ } else if (MATCH_OPTION("colo_filter_redirector0_outdev", token, oparg)) {
+ replace_string(&nic->colo_filter_redirector0_outdev, oparg);
+ } else if (MATCH_OPTION("colo_filter_redirector1_queue", token, oparg)) {
+ replace_string(&nic->colo_filter_redirector1_queue, oparg);
+ } else if (MATCH_OPTION("colo_filter_redirector1_indev", token, oparg)) {
+ replace_string(&nic->colo_filter_redirector1_indev, oparg);
+ } else if (MATCH_OPTION("colo_filter_redirector1_outdev", token, oparg)) {
+ replace_string(&nic->colo_filter_redirector1_outdev, oparg);
+ } else if (MATCH_OPTION("colo_compare_pri_in", token, oparg)) {
+ replace_string(&nic->colo_compare_pri_in, oparg);
+ } else if (MATCH_OPTION("colo_compare_sec_in", token, oparg)) {
+ replace_string(&nic->colo_compare_sec_in, oparg);
+ } else if (MATCH_OPTION("colo_compare_out", token, oparg)) {
+ replace_string(&nic->colo_compare_out, oparg);
} else if (MATCH_OPTION("accel", token, oparg)) {
fprintf(stderr, "the accel parameter for vifs is currently not supported\n");
} else if (MATCH_OPTION("devid", token, oparg)) {
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH V4 4/8] COLO-Proxy: Add primary userspace colo proxy start args
2017-03-06 2:59 ` [PATCH V4 4/8] COLO-Proxy: Add primary userspace colo proxy start args Zhang Chen
@ 2017-03-14 11:24 ` Wei Liu
0 siblings, 0 replies; 24+ messages in thread
From: Wei Liu @ 2017-03-14 11:24 UTC (permalink / raw)
To: Zhang Chen
Cc: Wei Liu, Li Zhijian, Ian Jackson, eddie dong, Yang Hongyang,
Xen devel, Bian Naimeng
On Mon, Mar 06, 2017 at 10:59:22AM +0800, Zhang Chen wrote:
> Qemu need this args to start userspace colo-proxy.
>
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH V4 5/8] COLO-Proxy: Add secondary userspace colo-proxy start args
2017-03-06 2:59 [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Zhang Chen
` (3 preceding siblings ...)
2017-03-06 2:59 ` [PATCH V4 4/8] COLO-Proxy: Add primary userspace colo proxy start args Zhang Chen
@ 2017-03-06 2:59 ` Zhang Chen
2017-03-14 11:24 ` Wei Liu
2017-03-06 2:59 ` [PATCH V4 6/8] COLO-Proxy: Add colo-compare notify args Zhang Chen
` (3 subsequent siblings)
8 siblings, 1 reply; 24+ messages in thread
From: Zhang Chen @ 2017-03-06 2:59 UTC (permalink / raw)
To: Xen devel, Wei Liu, Ian Jackson
Cc: Zhang Chen, Li Zhijian, eddie dong, Yang Hongyang, Bian Naimeng
Qemu need this args to start userspace colo-proxy.
Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
---
tools/libxl/libxl_dm.c | 34 ++++++++++++++++++++++++++++++++++
tools/libxl/libxl_nic.c | 27 +++++++++++++++++++++++++++
tools/libxl/libxl_types.idl | 15 ++++++++++++++-
tools/xl/xl_parse.c | 27 +++++++++++++++++++++++++++
4 files changed, 102 insertions(+), 1 deletion(-)
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index abd4edd..0fabd64 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -1274,6 +1274,40 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
if (state->saved_state) {
/* secondary colo run */
+
+ APPEND_COLO_SOCK_CLIENT(sock_sec_redirector0_id,
+ sock_sec_redirector0_ip,
+ sock_sec_redirector0_port);
+
+ APPEND_COLO_SOCK_CLIENT(sock_sec_redirector1_id,
+ sock_sec_redirector1_ip,
+ sock_sec_redirector1_port);
+
+ if (nics[i].colo_filter_sec_redirector0_queue &&
+ nics[i].colo_filter_sec_redirector0_indev) {
+ flexarray_append(dm_args, "-object");
+ flexarray_append(dm_args,
+ GCSPRINTF("filter-redirector,id=rs1,netdev=net%d,queue=%s,indev=%s",
+ nics[i].devid,
+ nics[i].colo_filter_sec_redirector0_queue,
+ nics[i].colo_filter_sec_redirector0_indev));
+ }
+ if (nics[i].colo_filter_sec_redirector1_queue &&
+ nics[i].colo_filter_sec_redirector1_indev) {
+ flexarray_append(dm_args, "-object");
+ flexarray_append(dm_args,
+ GCSPRINTF("filter-redirector,id=rs2,netdev=net%d,queue=%s,outdev=%s",
+ nics[i].devid,
+ nics[i].colo_filter_sec_redirector1_queue,
+ nics[i].colo_filter_sec_redirector1_outdev));
+ }
+ if (nics[i].colo_filter_sec_rewriter0_queue) {
+ flexarray_append(dm_args, "-object");
+ flexarray_append(dm_args,
+ GCSPRINTF("filter-rewriter,id=rs3,netdev=net%d,queue=%s",
+ nics[i].devid,
+ nics[i].colo_filter_sec_rewriter0_queue));
+ }
} else {
/* primary colo run */
diff --git a/tools/libxl/libxl_nic.c b/tools/libxl/libxl_nic.c
index 7c57bcf..5e1fecd 100644
--- a/tools/libxl/libxl_nic.c
+++ b/tools/libxl/libxl_nic.c
@@ -233,6 +233,20 @@ static void libxl__device_nic_add(libxl__egc *egc, uint32_t domid,
MAYBE_ADD_COLO_ARGS(compare_sec_in);
MAYBE_ADD_COLO_ARGS(compare_out);
+ MAYBE_ADD_COLO_ARGS(sock_sec_redirector0_id);
+ MAYBE_ADD_COLO_ARGS(sock_sec_redirector0_ip);
+ MAYBE_ADD_COLO_ARGS(sock_sec_redirector0_port);
+ MAYBE_ADD_COLO_ARGS(sock_sec_redirector1_id);
+ MAYBE_ADD_COLO_ARGS(sock_sec_redirector1_ip);
+ MAYBE_ADD_COLO_ARGS(sock_sec_redirector1_port);
+ MAYBE_ADD_COLO_ARGS(filter_sec_redirector0_queue);
+ MAYBE_ADD_COLO_ARGS(filter_sec_redirector0_indev);
+ MAYBE_ADD_COLO_ARGS(filter_sec_redirector0_outdev);
+ MAYBE_ADD_COLO_ARGS(filter_sec_redirector1_queue);
+ MAYBE_ADD_COLO_ARGS(filter_sec_redirector1_indev);
+ MAYBE_ADD_COLO_ARGS(filter_sec_redirector1_outdev);
+ MAYBE_ADD_COLO_ARGS(filter_sec_rewriter0_queue);
+
#undef MAYBE_ADD_COLO_ARGS
flexarray_append(back, "mac");
@@ -424,6 +438,19 @@ static int libxl__device_nic_from_xenstore(libxl__gc *gc,
CHECK_COLO_ARGS(compare_pri_in);
CHECK_COLO_ARGS(compare_sec_in);
CHECK_COLO_ARGS(compare_out);
+ CHECK_COLO_ARGS(sock_sec_redirector0_id);
+ CHECK_COLO_ARGS(sock_sec_redirector0_ip);
+ CHECK_COLO_ARGS(sock_sec_redirector0_port);
+ CHECK_COLO_ARGS(sock_sec_redirector1_id);
+ CHECK_COLO_ARGS(sock_sec_redirector1_ip);
+ CHECK_COLO_ARGS(sock_sec_redirector1_port);
+ CHECK_COLO_ARGS(filter_sec_redirector0_queue);
+ CHECK_COLO_ARGS(filter_sec_redirector0_indev);
+ CHECK_COLO_ARGS(filter_sec_redirector0_outdev);
+ CHECK_COLO_ARGS(filter_sec_redirector1_queue);
+ CHECK_COLO_ARGS(filter_sec_redirector1_indev);
+ CHECK_COLO_ARGS(filter_sec_redirector1_outdev);
+ CHECK_COLO_ARGS(filter_sec_rewriter0_queue);
#undef CHECK_COLO_ARGS
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 07ce345..47e96b1 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -658,7 +658,20 @@ libxl_device_nic = Struct("device_nic", [
("colo_filter_redirector1_outdev", string),
("colo_compare_pri_in", string),
("colo_compare_sec_in", string),
- ("colo_compare_out", string)
+ ("colo_compare_out", string),
+ ("colo_sock_sec_redirector0_id", string),
+ ("colo_sock_sec_redirector0_ip", string),
+ ("colo_sock_sec_redirector0_port", string),
+ ("colo_sock_sec_redirector1_id", string),
+ ("colo_sock_sec_redirector1_ip", string),
+ ("colo_sock_sec_redirector1_port", string),
+ ("colo_filter_sec_redirector0_queue", string),
+ ("colo_filter_sec_redirector0_indev", string),
+ ("colo_filter_sec_redirector0_outdev", string),
+ ("colo_filter_sec_redirector1_queue", string),
+ ("colo_filter_sec_redirector1_indev", string),
+ ("colo_filter_sec_redirector1_outdev", string),
+ ("colo_filter_sec_rewriter0_queue", string)
])
libxl_device_pci = Struct("device_pci", [
diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
index 88ef1c6..d2bbe26 100644
--- a/tools/xl/xl_parse.c
+++ b/tools/xl/xl_parse.c
@@ -516,6 +516,33 @@ int parse_nic_config(libxl_device_nic *nic, XLU_Config **config, char *token)
replace_string(&nic->colo_compare_sec_in, oparg);
} else if (MATCH_OPTION("colo_compare_out", token, oparg)) {
replace_string(&nic->colo_compare_out, oparg);
+
+ } else if (MATCH_OPTION("colo_sock_sec_redirector0_id", token, oparg)) {
+ replace_string(&nic->colo_sock_sec_redirector0_id, oparg);
+ } else if (MATCH_OPTION("colo_sock_sec_redirector0_ip", token, oparg)) {
+ replace_string(&nic->colo_sock_sec_redirector0_ip, oparg);
+ } else if (MATCH_OPTION("colo_sock_sec_redirector0_port", token, oparg)) {
+ replace_string(&nic->colo_sock_sec_redirector0_port, oparg);
+ } else if (MATCH_OPTION("colo_sock_sec_redirector1_id", token, oparg)) {
+ replace_string(&nic->colo_sock_sec_redirector1_id, oparg);
+ } else if (MATCH_OPTION("colo_sock_sec_redirector1_ip", token, oparg)) {
+ replace_string(&nic->colo_sock_sec_redirector1_ip, oparg);
+ } else if (MATCH_OPTION("colo_sock_sec_redirector1_port", token, oparg)) {
+ replace_string(&nic->colo_sock_sec_redirector1_port, oparg);
+ } else if (MATCH_OPTION("colo_filter_sec_redirector0_queue", token, oparg)) {
+ replace_string(&nic->colo_filter_sec_redirector0_queue, oparg);
+ } else if (MATCH_OPTION("colo_filter_sec_redirector0_indev", token, oparg)) {
+ replace_string(&nic->colo_filter_sec_redirector0_indev, oparg);
+ } else if (MATCH_OPTION("colo_filter_sec_redirector0_outdev", token, oparg)) {
+ replace_string(&nic->colo_filter_sec_redirector0_outdev, oparg);
+ } else if (MATCH_OPTION("colo_filter_sec_redirector1_queue", token, oparg)) {
+ replace_string(&nic->colo_filter_sec_redirector1_queue, oparg);
+ } else if (MATCH_OPTION("colo_filter_sec_redirector1_indev", token, oparg)) {
+ replace_string(&nic->colo_filter_sec_redirector1_indev, oparg);
+ } else if (MATCH_OPTION("colo_filter_sec_redirector1_outdev", token, oparg)) {
+ replace_string(&nic->colo_filter_sec_redirector1_outdev, oparg);
+ } else if (MATCH_OPTION("colo_filter_sec_rewriter0_queue", token, oparg)) {
+ replace_string(&nic->colo_filter_sec_rewriter0_queue, oparg);
} else if (MATCH_OPTION("accel", token, oparg)) {
fprintf(stderr, "the accel parameter for vifs is currently not supported\n");
} else if (MATCH_OPTION("devid", token, oparg)) {
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH V4 5/8] COLO-Proxy: Add secondary userspace colo-proxy start args
2017-03-06 2:59 ` [PATCH V4 5/8] COLO-Proxy: Add secondary userspace colo-proxy " Zhang Chen
@ 2017-03-14 11:24 ` Wei Liu
2017-03-14 11:39 ` Wei Liu
0 siblings, 1 reply; 24+ messages in thread
From: Wei Liu @ 2017-03-14 11:24 UTC (permalink / raw)
To: Zhang Chen
Cc: Wei Liu, Li Zhijian, Ian Jackson, eddie dong, Yang Hongyang,
Xen devel, Bian Naimeng
On Mon, Mar 06, 2017 at 10:59:23AM +0800, Zhang Chen wrote:
> Qemu need this args to start userspace colo-proxy.
>
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
> diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
> index 88ef1c6..d2bbe26 100644
> --- a/tools/xl/xl_parse.c
> +++ b/tools/xl/xl_parse.c
> @@ -516,6 +516,33 @@ int parse_nic_config(libxl_device_nic *nic, XLU_Config **config, char *token)
> replace_string(&nic->colo_compare_sec_in, oparg);
> } else if (MATCH_OPTION("colo_compare_out", token, oparg)) {
> replace_string(&nic->colo_compare_out, oparg);
> +
Stray blank line -- will try to fix it up while committing.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread* Re: [PATCH V4 5/8] COLO-Proxy: Add secondary userspace colo-proxy start args
2017-03-14 11:24 ` Wei Liu
@ 2017-03-14 11:39 ` Wei Liu
2017-03-15 1:53 ` Zhang Chen
0 siblings, 1 reply; 24+ messages in thread
From: Wei Liu @ 2017-03-14 11:39 UTC (permalink / raw)
To: Zhang Chen
Cc: Wei Liu, Li Zhijian, Ian Jackson, eddie dong, Yang Hongyang,
Xen devel, Bian Naimeng
On Tue, Mar 14, 2017 at 11:24:12AM +0000, Wei Liu wrote:
> On Mon, Mar 06, 2017 at 10:59:23AM +0800, Zhang Chen wrote:
> > Qemu need this args to start userspace colo-proxy.
> >
> > Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
>
> Acked-by: Wei Liu <wei.liu2@citrix.com>
>
> > diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
> > index 88ef1c6..d2bbe26 100644
> > --- a/tools/xl/xl_parse.c
> > +++ b/tools/xl/xl_parse.c
> > @@ -516,6 +516,33 @@ int parse_nic_config(libxl_device_nic *nic, XLU_Config **config, char *token)
> > replace_string(&nic->colo_compare_sec_in, oparg);
> > } else if (MATCH_OPTION("colo_compare_out", token, oparg)) {
> > replace_string(&nic->colo_compare_out, oparg);
> > +
>
> Stray blank line -- will try to fix it up while committing.
Actually, removing this will cause rebase error for the next patch. I
will just send another patch to remove this blank line when I get around
to it.
Wei.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread* Re: [PATCH V4 5/8] COLO-Proxy: Add secondary userspace colo-proxy start args
2017-03-14 11:39 ` Wei Liu
@ 2017-03-15 1:53 ` Zhang Chen
0 siblings, 0 replies; 24+ messages in thread
From: Zhang Chen @ 2017-03-15 1:53 UTC (permalink / raw)
To: Wei Liu
Cc: zhangchen.fnst, Li Zhijian, eddie dong, Ian Jackson,
Yang Hongyang, Xen devel, Bian Naimeng
On 03/14/2017 07:39 PM, Wei Liu wrote:
> On Tue, Mar 14, 2017 at 11:24:12AM +0000, Wei Liu wrote:
>> On Mon, Mar 06, 2017 at 10:59:23AM +0800, Zhang Chen wrote:
>>> Qemu need this args to start userspace colo-proxy.
>>>
>>> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
>> Acked-by: Wei Liu <wei.liu2@citrix.com>
>>
>>> diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
>>> index 88ef1c6..d2bbe26 100644
>>> --- a/tools/xl/xl_parse.c
>>> +++ b/tools/xl/xl_parse.c
>>> @@ -516,6 +516,33 @@ int parse_nic_config(libxl_device_nic *nic, XLU_Config **config, char *token)
>>> replace_string(&nic->colo_compare_sec_in, oparg);
>>> } else if (MATCH_OPTION("colo_compare_out", token, oparg)) {
>>> replace_string(&nic->colo_compare_out, oparg);
>>> +
>> Stray blank line -- will try to fix it up while committing.
> Actually, removing this will cause rebase error for the next patch. I
> will just send another patch to remove this blank line when I get around
> to it.
Don't need to bother you, I will send a patch for it.
Thanks
Zhang Chen
> Wei.
>
>
> .
>
--
Thanks
Zhang Chen
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH V4 6/8] COLO-Proxy: Add colo-compare notify args
2017-03-06 2:59 [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Zhang Chen
` (4 preceding siblings ...)
2017-03-06 2:59 ` [PATCH V4 5/8] COLO-Proxy: Add secondary userspace colo-proxy " Zhang Chen
@ 2017-03-06 2:59 ` Zhang Chen
2017-03-14 11:24 ` Wei Liu
2017-03-06 2:59 ` [PATCH V4 7/8] COLO-Proxy: Use socket to get checkpoint event Zhang Chen
` (2 subsequent siblings)
8 siblings, 1 reply; 24+ messages in thread
From: Zhang Chen @ 2017-03-06 2:59 UTC (permalink / raw)
To: Xen devel, Wei Liu, Ian Jackson
Cc: Zhang Chen, Li Zhijian, eddie dong, Yang Hongyang, Bian Naimeng
Xen colo-frame can use the notify way communicate with
qemu colo-compare.
Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
---
tools/libxl/libxl_dm.c | 12 +++++++++---
tools/libxl/libxl_nic.c | 8 ++++++++
tools/libxl/libxl_types.idl | 4 ++++
tools/xl/xl_parse.c | 8 ++++++++
4 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 0fabd64..4344c53 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -1323,6 +1323,10 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
sock_compare_sec_in_ip,
sock_compare_sec_in_port);
+ APPEND_COLO_SOCK_SERVER(sock_compare_notify_id,
+ sock_compare_notify_ip,
+ sock_compare_notify_port);
+
APPEND_COLO_SOCK_SERVER(sock_redirector0_id,
sock_redirector0_ip,
sock_redirector0_port);
@@ -1364,13 +1368,15 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
}
if (nics[i].colo_compare_pri_in &&
nics[i].colo_compare_sec_in &&
- nics[i].colo_compare_out) {
+ nics[i].colo_compare_out &&
+ nics[i].colo_compare_notify_dev) {
flexarray_append(dm_args, "-object");
flexarray_append(dm_args,
- GCSPRINTF("colo-compare,id=c1,primary_in=%s,secondary_in=%s,outdev=%s",
+ GCSPRINTF("colo-compare,id=c1,primary_in=%s,secondary_in=%s,outdev=%s,notify_dev=%s",
nics[i].colo_compare_pri_in,
nics[i].colo_compare_sec_in,
- nics[i].colo_compare_out));
+ nics[i].colo_compare_out,
+ nics[i].colo_compare_notify_dev));
}
}
ioemu_nics++;
diff --git a/tools/libxl/libxl_nic.c b/tools/libxl/libxl_nic.c
index 5e1fecd..33954a2 100644
--- a/tools/libxl/libxl_nic.c
+++ b/tools/libxl/libxl_nic.c
@@ -212,6 +212,9 @@ static void libxl__device_nic_add(libxl__egc *egc, uint32_t domid,
MAYBE_ADD_COLO_ARGS(sock_compare_sec_in_id);
MAYBE_ADD_COLO_ARGS(sock_compare_sec_in_ip);
MAYBE_ADD_COLO_ARGS(sock_compare_sec_in_port);
+ MAYBE_ADD_COLO_ARGS(sock_compare_notify_id);
+ MAYBE_ADD_COLO_ARGS(sock_compare_notify_ip);
+ MAYBE_ADD_COLO_ARGS(sock_compare_notify_port);
MAYBE_ADD_COLO_ARGS(sock_redirector0_id);
MAYBE_ADD_COLO_ARGS(sock_redirector0_ip);
MAYBE_ADD_COLO_ARGS(sock_redirector0_port);
@@ -232,6 +235,7 @@ static void libxl__device_nic_add(libxl__egc *egc, uint32_t domid,
MAYBE_ADD_COLO_ARGS(compare_pri_in);
MAYBE_ADD_COLO_ARGS(compare_sec_in);
MAYBE_ADD_COLO_ARGS(compare_out);
+ MAYBE_ADD_COLO_ARGS(compare_notify_dev);
MAYBE_ADD_COLO_ARGS(sock_sec_redirector0_id);
MAYBE_ADD_COLO_ARGS(sock_sec_redirector0_ip);
@@ -418,6 +422,9 @@ static int libxl__device_nic_from_xenstore(libxl__gc *gc,
CHECK_COLO_ARGS(sock_compare_sec_in_id);
CHECK_COLO_ARGS(sock_compare_sec_in_ip);
CHECK_COLO_ARGS(sock_compare_sec_in_port);
+ CHECK_COLO_ARGS(sock_compare_notify_id);
+ CHECK_COLO_ARGS(sock_compare_notify_ip);
+ CHECK_COLO_ARGS(sock_compare_notify_port);
CHECK_COLO_ARGS(sock_redirector0_id);
CHECK_COLO_ARGS(sock_redirector0_ip);
CHECK_COLO_ARGS(sock_redirector0_port);
@@ -438,6 +445,7 @@ static int libxl__device_nic_from_xenstore(libxl__gc *gc,
CHECK_COLO_ARGS(compare_pri_in);
CHECK_COLO_ARGS(compare_sec_in);
CHECK_COLO_ARGS(compare_out);
+ CHECK_COLO_ARGS(compare_notify_dev);
CHECK_COLO_ARGS(sock_sec_redirector0_id);
CHECK_COLO_ARGS(sock_sec_redirector0_ip);
CHECK_COLO_ARGS(sock_sec_redirector0_port);
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 47e96b1..516bd79 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -639,6 +639,9 @@ libxl_device_nic = Struct("device_nic", [
("colo_sock_compare_sec_in_id", string),
("colo_sock_compare_sec_in_ip", string),
("colo_sock_compare_sec_in_port", string),
+ ("colo_sock_compare_notify_id", string),
+ ("colo_sock_compare_notify_ip", string),
+ ("colo_sock_compare_notify_port", string),
("colo_sock_redirector0_id", string),
("colo_sock_redirector0_ip", string),
("colo_sock_redirector0_port", string),
@@ -659,6 +662,7 @@ libxl_device_nic = Struct("device_nic", [
("colo_compare_pri_in", string),
("colo_compare_sec_in", string),
("colo_compare_out", string),
+ ("colo_compare_notify_dev", string),
("colo_sock_sec_redirector0_id", string),
("colo_sock_sec_redirector0_ip", string),
("colo_sock_sec_redirector0_port", string),
diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
index d2bbe26..77e91c8 100644
--- a/tools/xl/xl_parse.c
+++ b/tools/xl/xl_parse.c
@@ -494,6 +494,12 @@ int parse_nic_config(libxl_device_nic *nic, XLU_Config **config, char *token)
replace_string(&nic->colo_sock_compare_pri_in_ip, oparg);
} else if (MATCH_OPTION("colo_sock_compare_pri_in_port", token, oparg)) {
replace_string(&nic->colo_sock_compare_pri_in_port, oparg);
+ } else if (MATCH_OPTION("colo_sock_compare_notify_id", token, oparg)) {
+ replace_string(&nic->colo_sock_compare_notify_id, oparg);
+ } else if (MATCH_OPTION("colo_sock_compare_notify_ip", token, oparg)) {
+ replace_string(&nic->colo_sock_compare_notify_ip, oparg);
+ } else if (MATCH_OPTION("colo_sock_compare_notify_port", token, oparg)) {
+ replace_string(&nic->colo_sock_compare_notify_port, oparg);
} else if (MATCH_OPTION("colo_filter_mirror_queue", token, oparg)) {
replace_string(&nic->colo_filter_mirror_queue, oparg);
} else if (MATCH_OPTION("colo_filter_mirror_outdev", token, oparg)) {
@@ -516,6 +522,8 @@ int parse_nic_config(libxl_device_nic *nic, XLU_Config **config, char *token)
replace_string(&nic->colo_compare_sec_in, oparg);
} else if (MATCH_OPTION("colo_compare_out", token, oparg)) {
replace_string(&nic->colo_compare_out, oparg);
+ } else if (MATCH_OPTION("colo_compare_notify_dev", token, oparg)) {
+ replace_string(&nic->colo_compare_notify_dev, oparg);
} else if (MATCH_OPTION("colo_sock_sec_redirector0_id", token, oparg)) {
replace_string(&nic->colo_sock_sec_redirector0_id, oparg);
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH V4 6/8] COLO-Proxy: Add colo-compare notify args
2017-03-06 2:59 ` [PATCH V4 6/8] COLO-Proxy: Add colo-compare notify args Zhang Chen
@ 2017-03-14 11:24 ` Wei Liu
0 siblings, 0 replies; 24+ messages in thread
From: Wei Liu @ 2017-03-14 11:24 UTC (permalink / raw)
To: Zhang Chen
Cc: Wei Liu, Li Zhijian, Ian Jackson, eddie dong, Yang Hongyang,
Xen devel, Bian Naimeng
On Mon, Mar 06, 2017 at 10:59:24AM +0800, Zhang Chen wrote:
> Xen colo-frame can use the notify way communicate with
> qemu colo-compare.
>
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH V4 7/8] COLO-Proxy: Use socket to get checkpoint event.
2017-03-06 2:59 [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Zhang Chen
` (5 preceding siblings ...)
2017-03-06 2:59 ` [PATCH V4 6/8] COLO-Proxy: Add colo-compare notify args Zhang Chen
@ 2017-03-06 2:59 ` Zhang Chen
2017-03-14 11:24 ` Wei Liu
2017-03-06 2:59 ` [PATCH V4 8/8] COLO-proxy: Add colo_userspace_proxy macro Zhang Chen
2017-03-06 14:31 ` [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Konrad Rzeszutek Wilk
8 siblings, 1 reply; 24+ messages in thread
From: Zhang Chen @ 2017-03-06 2:59 UTC (permalink / raw)
To: Xen devel, Wei Liu, Ian Jackson
Cc: Zhang Chen, Li Zhijian, eddie dong, Yang Hongyang, Bian Naimeng
We use kernel colo proxy's way to get the checkpoint event
from qemu colo-compare.
Qemu colo-compare need add a API to support this(I will add this in qemu).
Qemu side patch:
https://lists.nongnu.org/archive/html/qemu-devel/2017-02/msg07265.html
Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
---
tools/libxl/libxl_colo.h | 2 +
tools/libxl/libxl_colo_proxy.c | 126 +++++++++++++++++++++++++++++++++++++--
tools/libxl/libxl_colo_restore.c | 11 ++--
tools/libxl/libxl_colo_save.c | 21 ++++---
tools/libxl/libxl_nic.c | 4 ++
tools/libxl/libxl_types.idl | 4 +-
tools/xl/xl_parse.c | 4 ++
7 files changed, 156 insertions(+), 16 deletions(-)
diff --git a/tools/libxl/libxl_colo.h b/tools/libxl/libxl_colo.h
index 4746d8c..6c01b55 100644
--- a/tools/libxl/libxl_colo.h
+++ b/tools/libxl/libxl_colo.h
@@ -69,6 +69,8 @@ struct libxl__colo_proxy_state {
* False means use kernel colo proxy.
*/
bool is_userspace_proxy;
+ const char *checkpoint_host;
+ const char *checkpoint_port;
};
struct libxl__colo_save_state {
diff --git a/tools/libxl/libxl_colo_proxy.c b/tools/libxl/libxl_colo_proxy.c
index ec76e37..c3d5510 100644
--- a/tools/libxl/libxl_colo_proxy.c
+++ b/tools/libxl/libxl_colo_proxy.c
@@ -18,9 +18,13 @@
#include "libxl_internal.h"
#include <netlink/netlink.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
/* Consistent with the new COLO netlink channel in kernel side */
#define NETLINK_COLO 28
+#define COLO_DEFAULT_WAIT_TIME 500000
enum colo_netlink_op {
COLO_QUERY_CHECKPOINT = (NLMSG_MIN_TYPE + 1),
@@ -76,6 +80,63 @@ static int colo_proxy_send(libxl__colo_proxy_state *cps, uint8_t *buff,
return ret;
}
+static int colo_userspace_proxy_send(libxl__colo_proxy_state *cps,
+ uint8_t *buff,
+ uint32_t size)
+{
+ int ret = 0;
+ uint32_t len = 0;
+
+ len = htonl(size);
+ ret = send(cps->sock_fd, (uint8_t *)&len, sizeof(len), 0);
+ if (ret != sizeof(len)) {
+ goto err;
+ }
+
+ ret = send(cps->sock_fd, (uint8_t *)buff, size, 0);
+ if (ret != size) {
+ goto err;
+ }
+
+err:
+ return ret;
+}
+
+static int colo_userspace_proxy_recv(libxl__colo_proxy_state *cps,
+ char *buff,
+ unsigned int timeout_us)
+{
+ struct timeval tv;
+ int ret;
+ uint32_t len = 0;
+ uint32_t size = 0;
+
+ STATE_AO_GC(cps->ao);
+
+ if (timeout_us) {
+ tv.tv_sec = timeout_us / 1000000;
+ tv.tv_usec = timeout_us % 1000000;
+ ret = setsockopt(cps->sock_fd, SOL_SOCKET, SO_RCVTIMEO, &tv,
+ sizeof(tv));
+ if (ret < 0) {
+ LOGD(ERROR, ao->domid,
+ "colo_userspace_proxy_recv setsockopt error: %s",
+ strerror(errno));
+ }
+ }
+
+ ret = recv(cps->sock_fd, (uint8_t *)&len, sizeof(len), 0);
+ if (ret < 0) {
+ goto err;
+ }
+
+ size = ntohl(len);
+ ret = recv(cps->sock_fd, buff, size, 0);
+
+err:
+ return ret;
+}
+
/* error: return -1, otherwise return 0 */
static int64_t colo_proxy_recv(libxl__colo_proxy_state *cps, uint8_t **buff,
unsigned int timeout_us)
@@ -153,8 +214,45 @@ int colo_proxy_setup(libxl__colo_proxy_state *cps)
STATE_AO_GC(cps->ao);
/* If enable userspace proxy mode, we don't need setup kernel proxy */
- if (cps->is_userspace_proxy)
+ if (cps->is_userspace_proxy) {
+ struct sockaddr_in addr;
+ int port;
+ char recvbuff[1024];
+ const char sendbuf[] = "COLO_USERSPACE_PROXY_INIT";
+
+ memset(&addr, 0, sizeof(addr));
+ port = atoi(cps->checkpoint_port);
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(port);
+ addr.sin_addr.s_addr = inet_addr(cps->checkpoint_host);
+
+ skfd = socket(AF_INET, SOCK_STREAM, 0);
+ if (skfd < 0) {
+ LOGD(ERROR, ao->domid, "can not create a TCP socket: %s",
+ strerror(errno));
+ goto out;
+ }
+
+ cps->sock_fd = skfd;
+
+ if (connect(skfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+ LOGD(ERROR, ao->domid, "connect error");
+ goto out;
+ }
+
+ ret = colo_userspace_proxy_send(cps, (uint8_t *)sendbuf, strlen(sendbuf));
+ if (ret < 0)
+ goto out;
+
+ ret = colo_userspace_proxy_recv(cps, recvbuff, COLO_DEFAULT_WAIT_TIME);
+ if (ret < 0) {
+ LOGD(ERROR, ao->domid, "Can't recv msg from qemu colo-compare: %s",
+ strerror(errno));
+ goto out;
+ }
+
return 0;
+ }
skfd = socket(PF_NETLINK, SOCK_RAW, NETLINK_COLO);
if (skfd < 0) {
@@ -247,8 +345,13 @@ void colo_proxy_preresume(libxl__colo_proxy_state *cps)
* If enable userspace proxy mode,
* we don't need preresume kernel proxy
*/
- if (cps->is_userspace_proxy)
+ if (cps->is_userspace_proxy) {
+ const char sendbuf[] = "COLO_CHECKPOINT";
+ colo_userspace_proxy_send(cps,
+ (uint8_t *)sendbuf,
+ strlen(sendbuf));
return;
+ }
colo_proxy_send(cps, NULL, 0, COLO_CHECKPOINT);
/* TODO: need to handle if the call fails... */
@@ -277,6 +380,7 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
struct nlmsghdr *h;
struct colo_msg *m;
int ret = -1;
+ char recvbuff[1024];
STATE_AO_GC(cps->ao);
@@ -289,8 +393,19 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
* event.
*/
if (cps->is_userspace_proxy) {
- usleep(timeout_us);
- return 0;
+ ret = colo_userspace_proxy_recv(cps, recvbuff, timeout_us);
+ if (ret <= 0) {
+ ret = 0;
+ goto out1;
+ }
+
+ if (!strcmp(recvbuff, "DO_CHECKPOINT")) {
+ ret = 1;
+ } else {
+ LOGD(ERROR, ao->domid, "receive qemu colo-compare checkpoint error");
+ ret = 0;
+ }
+ goto out1;
}
size = colo_proxy_recv(cps, &buff, timeout_us);
@@ -318,4 +433,7 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
out:
free(buff);
return ret;
+
+out1:
+ return ret;
}
diff --git a/tools/libxl/libxl_colo_restore.c b/tools/libxl/libxl_colo_restore.c
index c6d239a..065ea00 100644
--- a/tools/libxl/libxl_colo_restore.c
+++ b/tools/libxl/libxl_colo_restore.c
@@ -613,7 +613,8 @@ static void colo_restore_preresume_cb(libxl__egc *egc,
}
}
- colo_proxy_preresume(&crs->cps);
+ if (!crs->cps.is_userspace_proxy)
+ colo_proxy_preresume(&crs->cps);
colo_restore_resume_vm(egc, crcs);
@@ -786,9 +787,11 @@ static void colo_setup_checkpoint_devices(libxl__egc *egc,
cds->ops = colo_restore_ops;
crs->cps.ao = ao;
- if (colo_proxy_setup(&crs->cps)) {
- LOGD(ERROR, cds->domid, "COLO: failed to setup colo proxy for guest");
- goto out;
+ if (!crs->cps.is_userspace_proxy) {
+ if (colo_proxy_setup(&crs->cps)) {
+ LOGD(ERROR, cds->domid, "COLO: failed to setup colo proxy for guest");
+ goto out;
+ }
}
if (init_device_subkind(cds))
diff --git a/tools/libxl/libxl_colo_save.c b/tools/libxl/libxl_colo_save.c
index 91e3fce..b4ca9f6 100644
--- a/tools/libxl/libxl_colo_save.c
+++ b/tools/libxl/libxl_colo_save.c
@@ -86,6 +86,7 @@ void libxl__colo_save_setup(libxl__egc *egc, libxl__colo_save_state *css)
libxl__checkpoint_devices_state *const cds = &dss->cds;
libxl__srm_save_autogen_callbacks *const callbacks =
&dss->sws.shs.callbacks.save.a;
+ libxl_device_nic *nics;
STATE_AO_GC(dss->ao);
@@ -110,19 +111,25 @@ void libxl__colo_save_setup(libxl__egc *egc, libxl__colo_save_state *css)
css->colo_proxy_script = GCSPRINTF("%s/colo-proxy-setup",
libxl__xen_script_dir_path());
- /* If enable userspace proxy mode, we don't need VIF */
- if (css->cps.is_userspace_proxy)
- cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VBD);
- else
- cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VIF) |
- (1 << LIBXL__DEVICE_KIND_VBD);
-
cds->ops = colo_ops;
cds->callback = colo_save_setup_done;
cds->ao = ao;
cds->domid = dss->domid;
cds->concrete_data = css;
+ /* If enable userspace proxy mode, we don't need VIF */
+ if (css->cps.is_userspace_proxy) {
+ cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VBD);
+
+ /* Use this args we can connect to qemu colo-compare */
+ nics = libxl_device_nic_list(CTX, cds->domid, &cds->num_nics);
+ css->cps.checkpoint_host = nics->colo_checkpoint_host;
+ css->cps.checkpoint_port = nics->colo_checkpoint_port;
+ } else {
+ cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VIF) |
+ (1 << LIBXL__DEVICE_KIND_VBD);
+ }
+
css->srs.ao = ao;
css->srs.fd = css->recv_fd;
css->srs.back_channel = true;
diff --git a/tools/libxl/libxl_nic.c b/tools/libxl/libxl_nic.c
index 33954a2..4b6e8c0 100644
--- a/tools/libxl/libxl_nic.c
+++ b/tools/libxl/libxl_nic.c
@@ -250,6 +250,8 @@ static void libxl__device_nic_add(libxl__egc *egc, uint32_t domid,
MAYBE_ADD_COLO_ARGS(filter_sec_redirector1_indev);
MAYBE_ADD_COLO_ARGS(filter_sec_redirector1_outdev);
MAYBE_ADD_COLO_ARGS(filter_sec_rewriter0_queue);
+ MAYBE_ADD_COLO_ARGS(checkpoint_host);
+ MAYBE_ADD_COLO_ARGS(checkpoint_port);
#undef MAYBE_ADD_COLO_ARGS
@@ -459,6 +461,8 @@ static int libxl__device_nic_from_xenstore(libxl__gc *gc,
CHECK_COLO_ARGS(filter_sec_redirector1_indev);
CHECK_COLO_ARGS(filter_sec_redirector1_outdev);
CHECK_COLO_ARGS(filter_sec_rewriter0_queue);
+ CHECK_COLO_ARGS(checkpoint_host);
+ CHECK_COLO_ARGS(checkpoint_port);
#undef CHECK_COLO_ARGS
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 516bd79..6d28dea 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -675,7 +675,9 @@ libxl_device_nic = Struct("device_nic", [
("colo_filter_sec_redirector1_queue", string),
("colo_filter_sec_redirector1_indev", string),
("colo_filter_sec_redirector1_outdev", string),
- ("colo_filter_sec_rewriter0_queue", string)
+ ("colo_filter_sec_rewriter0_queue", string),
+ ("colo_checkpoint_host", string),
+ ("colo_checkpoint_port", string)
])
libxl_device_pci = Struct("device_pci", [
diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
index 77e91c8..0787337 100644
--- a/tools/xl/xl_parse.c
+++ b/tools/xl/xl_parse.c
@@ -551,6 +551,10 @@ int parse_nic_config(libxl_device_nic *nic, XLU_Config **config, char *token)
replace_string(&nic->colo_filter_sec_redirector1_outdev, oparg);
} else if (MATCH_OPTION("colo_filter_sec_rewriter0_queue", token, oparg)) {
replace_string(&nic->colo_filter_sec_rewriter0_queue, oparg);
+ } else if (MATCH_OPTION("colo_checkpoint_host", token, oparg)) {
+ replace_string(&nic->colo_checkpoint_host, oparg);
+ } else if (MATCH_OPTION("colo_checkpoint_port", token, oparg)) {
+ replace_string(&nic->colo_checkpoint_port, oparg);
} else if (MATCH_OPTION("accel", token, oparg)) {
fprintf(stderr, "the accel parameter for vifs is currently not supported\n");
} else if (MATCH_OPTION("devid", token, oparg)) {
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH V4 7/8] COLO-Proxy: Use socket to get checkpoint event.
2017-03-06 2:59 ` [PATCH V4 7/8] COLO-Proxy: Use socket to get checkpoint event Zhang Chen
@ 2017-03-14 11:24 ` Wei Liu
2017-03-15 2:02 ` Zhang Chen
0 siblings, 1 reply; 24+ messages in thread
From: Wei Liu @ 2017-03-14 11:24 UTC (permalink / raw)
To: Zhang Chen
Cc: Wei Liu, Li Zhijian, Ian Jackson, eddie dong, Yang Hongyang,
Xen devel, Bian Naimeng
On Mon, Mar 06, 2017 at 10:59:25AM +0800, Zhang Chen wrote:
> We use kernel colo proxy's way to get the checkpoint event
> from qemu colo-compare.
> Qemu colo-compare need add a API to support this(I will add this in qemu).
> Qemu side patch:
> https://lists.nongnu.org/archive/html/qemu-devel/2017-02/msg07265.html
>
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
But see below.
> @@ -289,8 +393,19 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
> * event.
> */
> if (cps->is_userspace_proxy) {
> - usleep(timeout_us);
> - return 0;
> + ret = colo_userspace_proxy_recv(cps, recvbuff, timeout_us);
> + if (ret <= 0) {
> + ret = 0;
> + goto out1;
> + }
> +
> + if (!strcmp(recvbuff, "DO_CHECKPOINT")) {
> + ret = 1;
> + } else {
> + LOGD(ERROR, ao->domid, "receive qemu colo-compare checkpoint error");
> + ret = 0;
> + }
> + goto out1;
> }
>
> size = colo_proxy_recv(cps, &buff, timeout_us);
> @@ -318,4 +433,7 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
> out:
> free(buff);
> return ret;
> +
> +out1:
Perhaps try to come up with a better name than out1? Subsequent patch is
welcome.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread* Re: [PATCH V4 7/8] COLO-Proxy: Use socket to get checkpoint event.
2017-03-14 11:24 ` Wei Liu
@ 2017-03-15 2:02 ` Zhang Chen
2017-03-15 10:56 ` Wei Liu
0 siblings, 1 reply; 24+ messages in thread
From: Zhang Chen @ 2017-03-15 2:02 UTC (permalink / raw)
To: Wei Liu
Cc: zhangchen.fnst, Li Zhijian, eddie dong, Ian Jackson,
Yang Hongyang, Xen devel, Bian Naimeng
On 03/14/2017 07:24 PM, Wei Liu wrote:
> On Mon, Mar 06, 2017 at 10:59:25AM +0800, Zhang Chen wrote:
>> We use kernel colo proxy's way to get the checkpoint event
>> from qemu colo-compare.
>> Qemu colo-compare need add a API to support this(I will add this in qemu).
>> Qemu side patch:
>> https://lists.nongnu.org/archive/html/qemu-devel/2017-02/msg07265.html
>>
>> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
> Acked-by: Wei Liu <wei.liu2@citrix.com>
>
> But see below.
>
>> @@ -289,8 +393,19 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
>> * event.
>> */
>> if (cps->is_userspace_proxy) {
>> - usleep(timeout_us);
>> - return 0;
>> + ret = colo_userspace_proxy_recv(cps, recvbuff, timeout_us);
>> + if (ret <= 0) {
>> + ret = 0;
>> + goto out1;
>> + }
>> +
>> + if (!strcmp(recvbuff, "DO_CHECKPOINT")) {
>> + ret = 1;
>> + } else {
>> + LOGD(ERROR, ao->domid, "receive qemu colo-compare checkpoint error");
>> + ret = 0;
>> + }
>> + goto out1;
>> }
>>
>> size = colo_proxy_recv(cps, &buff, timeout_us);
>> @@ -318,4 +433,7 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
>> out:
>> free(buff);
>> return ret;
>> +
>> +out1:
> Perhaps try to come up with a better name than out1? Subsequent patch is
> welcome.
>
How about change 'out1' to 'out_userspace_proxy' ?
If OK, I will send a patch for it.
Thanks
Zhang Chen
> .
>
--
Thanks
Zhang Chen
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread* Re: [PATCH V4 7/8] COLO-Proxy: Use socket to get checkpoint event.
2017-03-15 2:02 ` Zhang Chen
@ 2017-03-15 10:56 ` Wei Liu
2017-03-16 1:21 ` Zhang Chen
0 siblings, 1 reply; 24+ messages in thread
From: Wei Liu @ 2017-03-15 10:56 UTC (permalink / raw)
To: Zhang Chen
Cc: Wei Liu, Li Zhijian, Ian Jackson, eddie dong, Yang Hongyang,
Xen devel, Bian Naimeng
On Wed, Mar 15, 2017 at 10:02:46AM +0800, Zhang Chen wrote:
>
>
> On 03/14/2017 07:24 PM, Wei Liu wrote:
> > On Mon, Mar 06, 2017 at 10:59:25AM +0800, Zhang Chen wrote:
> > > We use kernel colo proxy's way to get the checkpoint event
> > > from qemu colo-compare.
> > > Qemu colo-compare need add a API to support this(I will add this in qemu).
> > > Qemu side patch:
> > > https://lists.nongnu.org/archive/html/qemu-devel/2017-02/msg07265.html
> > >
> > > Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
> > Acked-by: Wei Liu <wei.liu2@citrix.com>
> >
> > But see below.
> >
> > > @@ -289,8 +393,19 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
> > > * event.
> > > */
> > > if (cps->is_userspace_proxy) {
> > > - usleep(timeout_us);
> > > - return 0;
> > > + ret = colo_userspace_proxy_recv(cps, recvbuff, timeout_us);
> > > + if (ret <= 0) {
> > > + ret = 0;
> > > + goto out1;
> > > + }
> > > +
> > > + if (!strcmp(recvbuff, "DO_CHECKPOINT")) {
> > > + ret = 1;
> > > + } else {
> > > + LOGD(ERROR, ao->domid, "receive qemu colo-compare checkpoint error");
> > > + ret = 0;
> > > + }
> > > + goto out1;
> > > }
> > > size = colo_proxy_recv(cps, &buff, timeout_us);
> > > @@ -318,4 +433,7 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
> > > out:
> > > free(buff);
> > > return ret;
> > > +
> > > +out1:
> > Perhaps try to come up with a better name than out1? Subsequent patch is
> > welcome.
> >
>
> How about change 'out1' to 'out_userspace_proxy' ?
> If OK, I will send a patch for it.
>
How about the following patch instead? Compile test only.
In general I would like code to stick with coding style.
--->8---
From 0a87defaad529c02babe24055d5782b74d3a38e3 Mon Sep 17 00:00:00 2001
From: Wei Liu <wei.liu2@citrix.com>
Date: Wed, 15 Mar 2017 10:50:19 +0000
Subject: [PATCH] libxl/colo: unified exit path for colo_proxy_checkpoint
Slightly refactor the code to have only one exit path for the said
function.
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: zhangchen.fnst@cn.fujitsu.com
---
tools/libxl/libxl_colo_proxy.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/tools/libxl/libxl_colo_proxy.c b/tools/libxl/libxl_colo_proxy.c
index c3d55104ea..5475f7ea32 100644
--- a/tools/libxl/libxl_colo_proxy.c
+++ b/tools/libxl/libxl_colo_proxy.c
@@ -375,7 +375,7 @@ typedef struct colo_msg {
int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
unsigned int timeout_us)
{
- uint8_t *buff;
+ uint8_t *buff = NULL;
int64_t size;
struct nlmsghdr *h;
struct colo_msg *m;
@@ -396,7 +396,7 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
ret = colo_userspace_proxy_recv(cps, recvbuff, timeout_us);
if (ret <= 0) {
ret = 0;
- goto out1;
+ goto out;
}
if (!strcmp(recvbuff, "DO_CHECKPOINT")) {
@@ -405,14 +405,16 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
LOGD(ERROR, ao->domid, "receive qemu colo-compare checkpoint error");
ret = 0;
}
- goto out1;
+ goto out;
}
size = colo_proxy_recv(cps, &buff, timeout_us);
/* timeout, return no checkpoint message. */
- if (size <= 0)
- return 0;
+ if (size <= 0) {
+ ret = 0;
+ goto out;
+ }
h = (struct nlmsghdr *) buff;
@@ -433,7 +435,4 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
out:
free(buff);
return ret;
-
-out1:
- return ret;
}
--
2.11.0
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH V4 7/8] COLO-Proxy: Use socket to get checkpoint event.
2017-03-15 10:56 ` Wei Liu
@ 2017-03-16 1:21 ` Zhang Chen
0 siblings, 0 replies; 24+ messages in thread
From: Zhang Chen @ 2017-03-16 1:21 UTC (permalink / raw)
To: Wei Liu
Cc: zhangchen.fnst, Li Zhijian, eddie dong, Ian Jackson,
Yang Hongyang, Xen devel, Bian Naimeng
On 03/15/2017 06:56 PM, Wei Liu wrote:
> On Wed, Mar 15, 2017 at 10:02:46AM +0800, Zhang Chen wrote:
>>
>> On 03/14/2017 07:24 PM, Wei Liu wrote:
>>> On Mon, Mar 06, 2017 at 10:59:25AM +0800, Zhang Chen wrote:
>>>> We use kernel colo proxy's way to get the checkpoint event
>>>> from qemu colo-compare.
>>>> Qemu colo-compare need add a API to support this(I will add this in qemu).
>>>> Qemu side patch:
>>>> https://lists.nongnu.org/archive/html/qemu-devel/2017-02/msg07265.html
>>>>
>>>> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
>>> Acked-by: Wei Liu <wei.liu2@citrix.com>
>>>
>>> But see below.
>>>
>>>> @@ -289,8 +393,19 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
>>>> * event.
>>>> */
>>>> if (cps->is_userspace_proxy) {
>>>> - usleep(timeout_us);
>>>> - return 0;
>>>> + ret = colo_userspace_proxy_recv(cps, recvbuff, timeout_us);
>>>> + if (ret <= 0) {
>>>> + ret = 0;
>>>> + goto out1;
>>>> + }
>>>> +
>>>> + if (!strcmp(recvbuff, "DO_CHECKPOINT")) {
>>>> + ret = 1;
>>>> + } else {
>>>> + LOGD(ERROR, ao->domid, "receive qemu colo-compare checkpoint error");
>>>> + ret = 0;
>>>> + }
>>>> + goto out1;
>>>> }
>>>> size = colo_proxy_recv(cps, &buff, timeout_us);
>>>> @@ -318,4 +433,7 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
>>>> out:
>>>> free(buff);
>>>> return ret;
>>>> +
>>>> +out1:
>>> Perhaps try to come up with a better name than out1? Subsequent patch is
>>> welcome.
>>>
>> How about change 'out1' to 'out_userspace_proxy' ?
>> If OK, I will send a patch for it.
>>
> How about the following patch instead? Compile test only.
>
> In general I would like code to stick with coding style.
>
> --->8---
> >From 0a87defaad529c02babe24055d5782b74d3a38e3 Mon Sep 17 00:00:00 2001
> From: Wei Liu <wei.liu2@citrix.com>
> Date: Wed, 15 Mar 2017 10:50:19 +0000
> Subject: [PATCH] libxl/colo: unified exit path for colo_proxy_checkpoint
>
> Slightly refactor the code to have only one exit path for the said
> function.
>
> Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Zhang Chen<zhangchen.fnst@cn.fujitsu.com>
Thanks
Zhang Chen
> Cc: zhangchen.fnst@cn.fujitsu.com
> ---
> tools/libxl/libxl_colo_proxy.c | 15 +++++++--------
> 1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/tools/libxl/libxl_colo_proxy.c b/tools/libxl/libxl_colo_proxy.c
> index c3d55104ea..5475f7ea32 100644
> --- a/tools/libxl/libxl_colo_proxy.c
> +++ b/tools/libxl/libxl_colo_proxy.c
> @@ -375,7 +375,7 @@ typedef struct colo_msg {
> int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
> unsigned int timeout_us)
> {
> - uint8_t *buff;
> + uint8_t *buff = NULL;
> int64_t size;
> struct nlmsghdr *h;
> struct colo_msg *m;
> @@ -396,7 +396,7 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
> ret = colo_userspace_proxy_recv(cps, recvbuff, timeout_us);
> if (ret <= 0) {
> ret = 0;
> - goto out1;
> + goto out;
> }
>
> if (!strcmp(recvbuff, "DO_CHECKPOINT")) {
> @@ -405,14 +405,16 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
> LOGD(ERROR, ao->domid, "receive qemu colo-compare checkpoint error");
> ret = 0;
> }
> - goto out1;
> + goto out;
> }
>
> size = colo_proxy_recv(cps, &buff, timeout_us);
>
> /* timeout, return no checkpoint message. */
> - if (size <= 0)
> - return 0;
> + if (size <= 0) {
> + ret = 0;
> + goto out;
> + }
>
> h = (struct nlmsghdr *) buff;
>
> @@ -433,7 +435,4 @@ int colo_proxy_checkpoint(libxl__colo_proxy_state *cps,
> out:
> free(buff);
> return ret;
> -
> -out1:
> - return ret;
> }
--
Thanks
Zhang Chen
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH V4 8/8] COLO-proxy: Add colo_userspace_proxy macro
2017-03-06 2:59 [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Zhang Chen
` (6 preceding siblings ...)
2017-03-06 2:59 ` [PATCH V4 7/8] COLO-Proxy: Use socket to get checkpoint event Zhang Chen
@ 2017-03-06 2:59 ` Zhang Chen
2017-03-14 11:24 ` Wei Liu
2017-03-06 14:31 ` [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Konrad Rzeszutek Wilk
8 siblings, 1 reply; 24+ messages in thread
From: Zhang Chen @ 2017-03-06 2:59 UTC (permalink / raw)
To: Xen devel, Wei Liu, Ian Jackson
Cc: Zhang Chen, Li Zhijian, eddie dong, Yang Hongyang, Bian Naimeng
Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
---
tools/libxl/libxl.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 92f1751..4c60e8f 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -870,6 +870,12 @@ typedef struct libxl__ctx libxl_ctx;
*/
#define LIBXL_HAVE_REMUS 1
+/*
+ * LIBXL_HAVE_COLO_USERSPACE_PROXY
+ * If this is defined, then libxl supports COLO userspace proxy.
+ */
+#define LIBXL_HAVE_COLO_USERSPACE_PROXY 1
+
typedef uint8_t libxl_mac[6];
#define LIBXL_MAC_FMT "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx"
#define LIBXL_MAC_FMTLEN ((2*6)+5) /* 6 hex bytes plus 5 colons */
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH V4 8/8] COLO-proxy: Add colo_userspace_proxy macro
2017-03-06 2:59 ` [PATCH V4 8/8] COLO-proxy: Add colo_userspace_proxy macro Zhang Chen
@ 2017-03-14 11:24 ` Wei Liu
0 siblings, 0 replies; 24+ messages in thread
From: Wei Liu @ 2017-03-14 11:24 UTC (permalink / raw)
To: Zhang Chen
Cc: Wei Liu, Li Zhijian, Ian Jackson, eddie dong, Yang Hongyang,
Xen devel, Bian Naimeng
On Mon, Mar 06, 2017 at 10:59:26AM +0800, Zhang Chen wrote:
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy
2017-03-06 2:59 [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Zhang Chen
` (7 preceding siblings ...)
2017-03-06 2:59 ` [PATCH V4 8/8] COLO-proxy: Add colo_userspace_proxy macro Zhang Chen
@ 2017-03-06 14:31 ` Konrad Rzeszutek Wilk
2017-03-07 3:25 ` Zhang Chen
8 siblings, 1 reply; 24+ messages in thread
From: Konrad Rzeszutek Wilk @ 2017-03-06 14:31 UTC (permalink / raw)
To: Zhang Chen
Cc: Wei Liu, Li Zhijian, Ian Jackson, eddie dong, Yang Hongyang,
Xen devel, Bian Naimeng
On Mon, Mar 06, 2017 at 10:59:18AM +0800, Zhang Chen wrote:
> Because of some reason, We no longer support COLO kernel proxy.
However the #7 talks about kernel colo proxy? Is this description
out-dated?
> V4:
One usually adds these comments to the patches. That is
right after the '---' you say:
v4: New patch
(for the new patches)
Or for the older patches (like #7):
v4: Fix typo.
Fix 'some bug' (perhaps be specific).
> - Because the origin 3/7 has been merged,
> remove it in this series.
> - Add new patch "COLO-Proxy: Add colo-compare notify args"
> to support qemu side patch:
> https://lists.nongnu.org/archive/html/qemu-devel/2017-02/msg07265.html
>
> - Add colo_userspace_proxy macro as a separate patch.
> - Add some comments about COLO and fix some typo in patch 2/7.
> - Fix some bug and typo in patch 7/7.
But the subject is 0/8? So it can't be 7/7. Did you mean
7/8? or 8/8/?
> - Rebase codes on upstream Xen.
Thanks!
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread* Re: [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy
2017-03-06 14:31 ` [PATCH V4 0/8] COLO-Proxy: Make Xen COLO use userspace colo-proxy Konrad Rzeszutek Wilk
@ 2017-03-07 3:25 ` Zhang Chen
0 siblings, 0 replies; 24+ messages in thread
From: Zhang Chen @ 2017-03-07 3:25 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk
Cc: Wei Liu, zhangchen.fnst, Li Zhijian, Ian Jackson, eddie dong,
Yang Hongyang, Xen devel, Bian Naimeng
On 03/06/2017 10:31 PM, Konrad Rzeszutek Wilk wrote:
> On Mon, Mar 06, 2017 at 10:59:18AM +0800, Zhang Chen wrote:
>> Because of some reason, We no longer support COLO kernel proxy.
> However the #7 talks about kernel colo proxy? Is this description
> out-dated?
In patch 7/8, the comments:
We use kernel colo proxy's way to get the checkpoint event
from qemu colo-compare.
Here, I mean we use same method communicate with qemu colo-compare
like colo kernel proxy do, we both use the socket.
>> V4:
> One usually adds these comments to the patches. That is
> right after the '---' you say:
>
> v4: New patch
>
> (for the new patches)
>
> Or for the older patches (like #7):
>
> v4: Fix typo.
> Fix 'some bug' (perhaps be specific).
OK, I will add version comments in patches next version.
>
>> - Because the origin 3/7 has been merged,
>> remove it in this series.
>> - Add new patch "COLO-Proxy: Add colo-compare notify args"
>> to support qemu side patch:
>> https://lists.nongnu.org/archive/html/qemu-devel/2017-02/msg07265.html
>>
>> - Add colo_userspace_proxy macro as a separate patch.
>> - Add some comments about COLO and fix some typo in patch 2/7.
>> - Fix some bug and typo in patch 7/7.
> But the subject is 0/8? So it can't be 7/7. Did you mean
> 7/8? or 8/8/?
Sorry, s/"7/7"/"7/8", s/"2/7"/"2/8".
Thanks
Zhang Chen
>
>> - Rebase codes on upstream Xen.
> Thanks!
>
>
> .
>
--
Thanks
Zhang Chen
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 24+ messages in thread