qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH COLO-Frame v6 18/31] COLO: Add new command parameter


From: zhanghailiang
Subject: [Qemu-devel] [PATCH COLO-Frame v6 18/31] COLO: Add new command parameter 'colo_nicname' 'colo_script' for net
Date: Thu, 18 Jun 2015 16:58:42 +0800

The 'colo_nicname' should be assigned with network name,
for exmple, 'eth2'. It will be parameter of 'colo_script',
'colo_script' should be assigned with an scirpt path.

We parse these parameter in tap.

Cc: Stefan Hajnoczi <address@hidden>
Cc: Jason Wang <address@hidden>
Cc: Eric Blake <address@hidden>
Cc: Markus Armbruster <address@hidden>
Signed-off-by: zhanghailiang <address@hidden>
Signed-off-by: Li Zhijian <address@hidden>
---
 include/net/colo-nic.h | 23 +++++++++++++++++++++++
 include/net/net.h      |  2 ++
 net/tap.c              | 27 ++++++++++++++++++++++++---
 qapi-schema.json       |  8 +++++++-
 qemu-options.hx        |  7 +++++++
 5 files changed, 63 insertions(+), 4 deletions(-)
 create mode 100644 include/net/colo-nic.h

diff --git a/include/net/colo-nic.h b/include/net/colo-nic.h
new file mode 100644
index 0000000..3075d97
--- /dev/null
+++ b/include/net/colo-nic.h
@@ -0,0 +1,23 @@
+/*
+ * COarse-grain LOck-stepping Virtual Machines for Non-stop Service (COLO)
+ * (a.k.a. Fault Tolerance or Continuous Replication)
+ *
+ * Copyright (c) 2015 HUAWEI TECHNOLOGIES CO., LTD.
+ * Copyright (c) 2015 FUJITSU LIMITED
+ * Copyright (c) 2015 Intel Corporation
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * later.  See the COPYING file in the top-level directory.
+ *
+ */
+
+#ifndef COLO_NIC_H
+#define COLO_NIC_H
+
+typedef struct COLONicState {
+    char nicname[128]; /* forward dev */
+    char script[1024]; /* colo script */
+    char ifname[128];  /* e.g. tap name */
+} COLONicState;
+
+#endif
diff --git a/include/net/net.h b/include/net/net.h
index e66ca03..615ba23 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -8,6 +8,7 @@
 #include "net/queue.h"
 #include "migration/vmstate.h"
 #include "qapi-types.h"
+#include "net/colo-nic.h"
 
 #define MAX_QUEUE_NUM 1024
 
@@ -84,6 +85,7 @@ struct NetClientState {
     char *model;
     char *name;
     char info_str[256];
+    COLONicState cns;
     unsigned receive_disabled : 1;
     NetClientDestructor *destructor;
     unsigned int queue_index;
diff --git a/net/tap.c b/net/tap.c
index aa8b3f5..c558f79 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -616,6 +616,7 @@ static void net_init_tap_one(const NetdevTapOptions *tap, 
NetClientState *peer,
     Error *err = NULL;
     TAPState *s = net_tap_fd_init(peer, model, name, fd, vnet_hdr);
     int vhostfd;
+    NetClientState *nc = NULL;
 
     tap_set_sndbuf(s->fd, tap, &err);
     if (err) {
@@ -640,6 +641,17 @@ static void net_init_tap_one(const NetdevTapOptions *tap, 
NetClientState *peer,
         }
     }
 
+    nc = &(s->nc);
+    snprintf(nc->cns.ifname, sizeof(nc->cns.ifname), "%s", ifname);
+    if (tap->has_colo_script) {
+        snprintf(nc->cns.script, sizeof(nc->cns.script), "%s",
+                 tap->colo_script);
+    }
+    if (tap->has_colo_nicname) {
+        snprintf(nc->cns.nicname, sizeof(nc->cns.nicname), "%s",
+                 tap->colo_nicname);
+    }
+
     if (tap->has_vhost ? tap->vhost :
         vhostfdname || (tap->has_vhostforce && tap->vhostforce)) {
         VhostNetOptions options;
@@ -759,9 +771,10 @@ int net_init_tap(const NetClientOptions *opts, const char 
*name,
 
         if (tap->has_ifname || tap->has_script || tap->has_downscript ||
             tap->has_vnet_hdr || tap->has_helper || tap->has_queues ||
-            tap->has_vhostfd) {
+            tap->has_vhostfd || tap->has_colo_script || tap->has_colo_nicname) 
{
             error_setg(errp, "ifname=, script=, downscript=, vnet_hdr=, "
                        "helper=, queues=, and vhostfd= "
+                        "colo_script=, and colo_nicname= "
                        "are invalid with fds=");
             return -1;
         }
@@ -804,9 +817,11 @@ int net_init_tap(const NetClientOptions *opts, const char 
*name,
         }
     } else if (tap->has_helper) {
         if (tap->has_ifname || tap->has_script || tap->has_downscript ||
-            tap->has_vnet_hdr || tap->has_queues || tap->has_vhostfds) {
+            tap->has_vnet_hdr || tap->has_queues || tap->has_vhostfds ||
+            tap->has_colo_script || tap->has_colo_nicname) {
             error_setg(errp, "ifname=, script=, downscript=, vnet_hdr=, "
-                       "queues=, and vhostfds= are invalid with helper=");
+                       "queues=, and vhostfds=, colo_script=, and "
+                       "colo_nicname= are invalid with helper=");
             return -1;
         }
 
@@ -828,6 +843,12 @@ int net_init_tap(const NetClientOptions *opts, const char 
*name,
             return -1;
         }
     } else {
+        if (queues > 1 && (tap->has_colo_script || tap->has_colo_nicname)) {
+            error_report("queues > 1 is invalid if colo_script or "
+                         "colo_nicname is specified");
+            return -1;
+        }
+
         if (tap->has_vhostfds) {
             error_setg(errp, "vhostfds= is invalid if fds= wasn't specified");
             return -1;
diff --git a/qapi-schema.json b/qapi-schema.json
index e5a0b1d..736f8bd 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -2293,6 +2293,10 @@
 #
 # @queues: #optional number of queues to be created for multiqueue capable tap
 #
+# @colo_nicname: #optional the host physical nic for QEMU (Since 2.3)
+#
+# @colo_script: #optional the script file which used by COLO (Since 2.3)
+#
 # Since 1.2
 ##
 { 'struct': 'NetdevTapOptions',
@@ -2309,7 +2313,9 @@
     '*vhostfd':    'str',
     '*vhostfds':   'str',
     '*vhostforce': 'bool',
-    '*queues':     'uint32'} }
+    '*queues':     'uint32',
+    '*colo_nicname':  'str',
+    '*colo_script':   'str'} }
 
 ##
 # @NetdevSocketOptions
diff --git a/qemu-options.hx b/qemu-options.hx
index 5438f98..46d1661 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1474,6 +1474,9 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
     "-netdev 
tap,id=str[,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]\n"
     "         
[,helper=helper][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off]\n"
     "         
[,vhostfd=h][,vhostfds=x:y:...:z][,vhostforce=on|off][,queues=n]\n"
+#ifdef CONFIG_COLO
+    "         [,colo_nicname=nicname][,colo_script=scriptfile]\n"
+#endif
     "                configure a host TAP network backend with ID 'str'\n"
     "                use network scripts 'file' (default=" 
DEFAULT_NETWORK_SCRIPT ")\n"
     "                to configure it and 'dfile' (default=" 
DEFAULT_NETWORK_DOWN_SCRIPT ")\n"
@@ -1493,6 +1496,10 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
     "                use 'vhostfd=h' to connect to an already opened vhost net 
device\n"
     "                use 'vhostfds=x:y:...:z to connect to multiple already 
opened vhost net devices\n"
     "                use 'queues=n' to specify the number of queues to be 
created for multiqueue TAP\n"
+#ifdef CONFIG_COLO
+    "                use 'colo_nicname=nicname' to specify the host physical 
nic for QEMU\n"
+    "                use 'colo_script=scriptfile' to specify script file when 
colo is enabled\n"
+#endif
     "-netdev bridge,id=str[,br=bridge][,helper=helper]\n"
     "                configure a host TAP network backend with ID 'str' that 
is\n"
     "                connected to a bridge (default=" DEFAULT_BRIDGE_INTERFACE 
")\n"
-- 
1.7.12.4





reply via email to

[Prev in Thread] Current Thread [Next in Thread]