qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH 4/4] Allow default network type to be overridden


From: Anthony Liguori
Subject: [Qemu-devel] [PATCH 4/4] Allow default network type to be overridden
Date: Thu, 21 Jan 2010 12:48:53 -0600

Introduce a default option to the network device which specifies that this is
a default network device.  This approach should generalize to any other device.

The meaning of a default device is as follows: a default device is added to a
machine IIF defaults aren't disable (via -default or -nodefaults) and a
non-default device of this type hasn't been added.

Signed-off-by: Anthony Liguori <address@hidden>
---
 net.c |   42 +++++++++++++++++++++++++++++++++++++-----
 1 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/net.c b/net.c
index 6ef93e6..1aa3c77 100644
--- a/net.c
+++ b/net.c
@@ -833,6 +833,10 @@ static int net_init_nic(QemuOpts *opts,
         .name = "name",                            \
         .type = QEMU_OPT_STRING,                   \
         .help = "identifier for monitor commands", \
+     }, {                                          \
+        .name = "default",                         \
+        .type = QEMU_OPT_BOOL,                     \
+        .help = "act as default network device",   \
      }
 
 typedef int (*net_client_init_func)(QemuOpts *opts,
@@ -1056,6 +1060,15 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int 
is_netdev)
     const char *type;
     int i;
 
+    /* Do not create default network devices if no defaults */
+    if (!default_net) {
+        const char *opt = qemu_opt_get(opts, "default");
+
+        if (opt && strcmp(opt, "on") == 0) {
+            return 0;
+        }
+    }
+
     type = qemu_opt_get(opts, "type");
 
     if (!is_netdev) {
@@ -1320,10 +1333,22 @@ static int net_init_netdev(QemuOpts *opts, void *dummy)
 int net_init_clients(void)
 {
     if (default_net) {
-        /* if no clients, we use a default config */
-        qemu_opts_set(&qemu_net_opts, NULL, "type", "nic");
+        QemuOpts *opts;
+
+        opts = qemu_opts_create(&qemu_net_opts, NULL, 1);
+        if (opts == NULL) {
+            return -1;
+        }
+        qemu_opt_set(opts, "type", "nic");
+        qemu_opt_set(opts, "default", "on");
+
 #ifdef CONFIG_SLIRP
-        qemu_opts_set(&qemu_net_opts, NULL, "type", "user");
+        opts = qemu_opts_create(&qemu_net_opts, NULL, 1);
+        if (opts == NULL) {
+            return -1;
+        }
+        qemu_opt_set(opts, "type", "user");
+        qemu_opt_set(opts, "default", "on");
 #endif
     }
 
@@ -1344,6 +1369,8 @@ int net_init_clients(void)
 
 int net_client_parse(QemuOptsList *opts_list, const char *optarg)
 {
+    QemuOpts *opts;
+    const char *opt;
 #if defined(CONFIG_SLIRP)
     int ret;
     if (net_slirp_parse_legacy(opts_list, optarg, &ret)) {
@@ -1351,10 +1378,15 @@ int net_client_parse(QemuOptsList *opts_list, const 
char *optarg)
     }
 #endif
 
-    if (!qemu_opts_parse(opts_list, optarg, "type")) {
+    opts = qemu_opts_parse(opts_list, optarg, "type");
+    if (opts == NULL) {
         return -1;
     }
 
-    default_net = 0;
+    opt = qemu_opt_get(opts, "default");
+    if (!opt || strcmp(opt, "off") == 0) {
+        default_net = 0;
+    }
+
     return 0;
 }
-- 
1.6.5.2





reply via email to

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