From: Mark McLoughlin <markmc@redhat.com>
To: qemu-devel@nongnu.org
Cc: Mark McLoughlin <markmc@redhat.com>
Subject: [Qemu-devel] [PATCH 24/24] Final net cleanup after conversion to QemuOpts
Date: Wed, 23 Sep 2009 11:24:23 +0100 [thread overview]
Message-ID: <1253701463-3134-25-git-send-email-markmc@redhat.com> (raw)
In-Reply-To: <1253701463-3134-1-git-send-email-markmc@redhat.com>
Now that net_client_init() has no users, kill it off and rename
net_client_init_from_opts().
There is no further need for the old code in net_client_parse() either.
We use qemu_opts_parse() 'firstname' facitity for that. Instead, move
the special handling of the 'vmchannel' type there.
Simplify the vl.c code into merely call net_client_parse() for each
-net command line option and then calling net_init_clients() later
to iterate over the options and create the clients.
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
---
hw/pci-hotplug.c | 2 +-
net.c | 109 +++++++++++++++++++++++++++---------------------------
net.h | 5 +-
vl.c | 28 ++------------
4 files changed, 62 insertions(+), 82 deletions(-)
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index 4905157..e1a4ed6 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -51,7 +51,7 @@ static PCIDevice *qemu_pci_hot_add_nic(Monitor *mon,
qemu_opt_set(opts, "type", "nic");
- ret = net_client_init_from_opts(mon, opts);
+ ret = net_client_init(mon, opts);
if (ret < 0)
return NULL;
if (nd_table[ret].devaddr) {
diff --git a/net.c b/net.c
index a192761..71b57ed 100644
--- a/net.c
+++ b/net.c
@@ -2995,7 +2995,7 @@ static struct {
{ /* end of list */ }
};
-int net_client_init_from_opts(Monitor *mon, QemuOpts *opts)
+int net_client_init(Monitor *mon, QemuOpts *opts)
{
const char *type;
int i;
@@ -3024,37 +3024,6 @@ int net_client_init_from_opts(Monitor *mon, QemuOpts *opts)
return -1;
}
-int net_client_init(Monitor *mon, const char *device, const char *p)
-{
- QemuOpts *opts;
-
-#ifdef CONFIG_SLIRP
- if (!strcmp(device, "channel")) {
- if (QTAILQ_EMPTY(&slirp_stacks)) {
- struct slirp_config_str *config;
-
- config = qemu_malloc(sizeof(*config));
- pstrcpy(config->str, sizeof(config->str), p);
- config->flags = SLIRP_CFG_LEGACY;
- config->next = slirp_configs;
- slirp_configs = config;
- } else {
- slirp_guestfwd(QTAILQ_FIRST(&slirp_stacks), mon, p, 1);
- }
- return 0;
- }
-#endif
-
- opts = qemu_opts_parse(&qemu_net_opts, p, NULL);
- if (!opts) {
- return -1;
- }
-
- qemu_opt_set(opts, "type", device);
-
- return net_client_init_from_opts(mon, opts);
-}
-
void net_client_uninit(NICInfo *nd)
{
nd->vlan->nb_guest_devs--;
@@ -3108,7 +3077,7 @@ void net_host_device_add(Monitor *mon, const QDict *qdict)
qemu_opt_set(opts, "type", device);
- if (net_client_init_from_opts(mon, opts) < 0) {
+ if (net_client_init(mon, opts) < 0) {
monitor_printf(mon, "adding host network device %s failed\n", device);
}
}
@@ -3130,26 +3099,6 @@ void net_host_device_remove(Monitor *mon, const QDict *qdict)
qemu_del_vlan_client(vc);
}
-int net_client_parse(const char *str)
-{
- const char *p;
- char *q;
- char device[64];
-
- p = str;
- q = device;
- while (*p != '\0' && *p != ',') {
- if ((q - device) < sizeof(device) - 1)
- *q++ = *p;
- p++;
- }
- *q = '\0';
- if (*p == ',')
- p++;
-
- return net_client_init(NULL, device, p);
-}
-
void net_set_boot_mask(int net_boot_mask)
{
int i;
@@ -3230,7 +3179,7 @@ void net_cleanup(void)
}
}
-void net_client_check(void)
+static void net_check_clients(void)
{
VLANState *vlan;
@@ -3245,3 +3194,55 @@ void net_client_check(void)
vlan->id);
}
}
+
+static int net_init_client(QemuOpts *opts, void *dummy)
+{
+ return net_client_init(NULL, opts);
+}
+
+int net_init_clients(void)
+{
+ if (QTAILQ_EMPTY(&qemu_net_opts.head)) {
+ /* if no clients, we use a default config */
+ qemu_opts_set(&qemu_net_opts, NULL, "type", "nic");
+#ifdef CONFIG_SLIRP
+ qemu_opts_set(&qemu_net_opts, NULL, "type", "user");
+#endif
+ }
+
+ if (qemu_opts_foreach(&qemu_net_opts, net_init_client, NULL, 1) == -1) {
+ return -1;
+ }
+
+ net_check_clients();
+
+ return 0;
+}
+
+int net_client_parse(const char *optarg)
+{
+ /* handle legacy -net channel,port:chr */
+ if (!strncmp(optarg, "channel,", strlen("channel,"))) {
+ optarg += strlen("channel,");
+
+ if (QTAILQ_EMPTY(&slirp_stacks)) {
+ struct slirp_config_str *config;
+
+ config = qemu_malloc(sizeof(*config));
+ pstrcpy(config->str, sizeof(config->str), optarg);
+ config->flags = SLIRP_CFG_LEGACY;
+ config->next = slirp_configs;
+ slirp_configs = config;
+ } else {
+ slirp_guestfwd(QTAILQ_FIRST(&slirp_stacks), NULL, optarg, 1);
+ }
+
+ return 0;
+ }
+
+ if (!qemu_opts_parse(&qemu_net_opts, optarg, "type")) {
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/net.h b/net.h
index 1b849b4..2669287 100644
--- a/net.h
+++ b/net.h
@@ -135,16 +135,15 @@ void net_checksum_calculate(uint8_t *data, int length);
extern const char *legacy_tftp_prefix;
extern const char *legacy_bootp_filename;
-int net_client_init(Monitor *mon, const char *device, const char *p);
-int net_client_init_from_opts(Monitor *mon, QemuOpts *opts);
+int net_client_init(Monitor *mon, QemuOpts *opts);
void net_client_uninit(NICInfo *nd);
int net_client_parse(const char *str);
+int net_init_clients(void);
void net_slirp_smb(const char *exported_dir);
void net_slirp_hostfwd_add(Monitor *mon, const QDict *qdict);
void net_slirp_hostfwd_remove(Monitor *mon, const QDict *qdict);
void net_slirp_redir(const char *redir_str);
void net_cleanup(void);
-void net_client_check(void);
void net_set_boot_mask(int boot_mask);
void net_host_device_add(Monitor *mon, const QDict *qdict);
void net_host_device_remove(Monitor *mon, const QDict *qdict);
diff --git a/vl.c b/vl.c
index f9e60ed..684f981 100644
--- a/vl.c
+++ b/vl.c
@@ -2506,7 +2506,7 @@ static int usb_device_add(const char *devname, int is_hotplug)
qemu_opt_set(opts, "type", "nic");
qemu_opt_set(opts, "model", "usb");
- idx = net_client_init_from_opts(NULL, opts);
+ idx = net_client_init(NULL, opts);
if (idx == -1) {
return -1;
}
@@ -4426,8 +4426,6 @@ int qemu_uuid_parse(const char *str, uint8_t *uuid)
return 0;
}
-#define MAX_NET_CLIENTS 32
-
#ifndef _WIN32
static void termsig_handler(int signal)
@@ -4631,8 +4629,6 @@ int main(int argc, char **argv, char **envp)
DisplayState *ds;
DisplayChangeListener *dcl;
int cyls, heads, secs, translation;
- const char *net_clients[MAX_NET_CLIENTS];
- int nb_net_clients;
QemuOpts *hda_opts = NULL, *opts;
int optind;
const char *r, *optarg;
@@ -4733,7 +4729,6 @@ int main(int argc, char **argv, char **envp)
node_cpumask[i] = 0;
}
- nb_net_clients = 0;
nb_numa_nodes = 0;
nb_nics = 0;
@@ -4979,12 +4974,9 @@ int main(int argc, char **argv, char **envp)
break;
#endif
case QEMU_OPTION_net:
- if (nb_net_clients >= MAX_NET_CLIENTS) {
- fprintf(stderr, "qemu: too many network clients\n");
+ if (net_client_parse(optarg) == -1) {
exit(1);
}
- net_clients[nb_net_clients] = optarg;
- nb_net_clients++;
break;
#ifdef CONFIG_SLIRP
case QEMU_OPTION_tftp:
@@ -5570,25 +5562,13 @@ int main(int argc, char **argv, char **envp)
socket_init();
#endif
- /* init network clients */
- if (nb_net_clients == 0) {
- /* if no clients, we use a default config */
- net_clients[nb_net_clients++] = "nic";
-#ifdef CONFIG_SLIRP
- net_clients[nb_net_clients++] = "user";
-#endif
- }
-
- for(i = 0;i < nb_net_clients; i++) {
- if (net_client_parse(net_clients[i]) < 0)
- exit(1);
+ if (net_init_clients() < 0) {
+ exit(1);
}
net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
net_set_boot_mask(net_boot);
- net_client_check();
-
/* init the bluetooth world */
if (foreach_device_config(DEV_BT, bt_parse))
exit(1);
--
1.6.2.5
next prev parent reply other threads:[~2009-09-23 10:26 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-23 10:23 [Qemu-devel] [PATCH 00/19 v2] Port -net to QemuOpts Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 01/24] Use qemu_strdup() for NICInfo string fields Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 02/24] Don't assign a static string to NICInfo::model Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 03/24] Make NICInfo string fields non-const Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 04/24] Correctly free nd structure Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 05/24] Use qemu_strdup() for VLANClientState string fields Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 06/24] Fix coding style issue Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 07/24] Remove bogus error message from qemu_opts_set() Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 08/24] Remove double error message in qemu_option_set() Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 09/24] Remove double error message for -device option parsing Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 10/24] Make qemu_opts_parse() handle empty strings Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 11/24] Add qemu_opts_validate() for post parsing validation Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 12/24] Never overwrite a QemuOpt Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 13/24] Add qemu_net_opts Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 14/24] Port -net none and -net nic to QemuOpts Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 15/24] Port -net user " Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 16/24] Port -net tap " Mark McLoughlin
2009-09-30 19:41 ` Anthony Liguori
2009-10-01 6:43 ` Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 17/24] Port -net socket " Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 18/24] Port -net vde " Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 19/24] Port -net dump " Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 20/24] Clean up legacy code in net_client_init() Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 21/24] Port host_net_add monitor command to QemuOpts Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 22/24] Port usb net " Mark McLoughlin
2009-09-23 10:24 ` [Qemu-devel] [PATCH 23/24] Port PCI NIC hotplug " Mark McLoughlin
2009-09-23 10:24 ` Mark McLoughlin [this message]
2009-09-23 15:58 ` [Qemu-devel] [PATCH 00/19 v2] Port -net " Mark McLoughlin
2009-09-30 10:33 ` Mark McLoughlin
2009-10-06 11:16 ` [Qemu-devel] [PATCH 00/19 v3] " Mark McLoughlin
2009-10-06 11:16 ` [Qemu-devel] [PATCH] Register rtc options for -set Mark McLoughlin
2009-10-06 11:16 ` [Qemu-devel] [PATCH] Use qemu_strdup() for NICInfo string fields Mark McLoughlin
2009-10-06 11:16 ` [Qemu-devel] [PATCH] Don't assign a static string to NICInfo::model Mark McLoughlin
2009-10-06 11:16 ` [Qemu-devel] [PATCH] Make NICInfo string fields non-const Mark McLoughlin
2009-10-06 19:19 ` Anthony Liguori
2009-10-06 11:16 ` [Qemu-devel] [PATCH] Move memset() from net_client_uninit() to net_client_init() Mark McLoughlin
2009-10-06 11:16 ` [Qemu-devel] [PATCH] Use qemu_strdup() for VLANClientState string fields Mark McLoughlin
2009-10-06 11:16 ` [Qemu-devel] [PATCH] Make net_client_init() consume slirp_configs even on error Mark McLoughlin
2009-10-06 11:16 ` [Qemu-devel] [PATCH] Don't exit() in config_error() Mark McLoughlin
2009-10-06 11:16 ` [Qemu-devel] [PATCH] Drop config_error(), use qemu_error() instead Mark McLoughlin
2009-10-06 11:16 ` [Qemu-devel] [PATCH] Remove bogus error message from qemu_opts_set() Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Remove double error message in qemu_option_set() Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Remove double error message for -device option parsing Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Make qemu_opts_parse() handle empty strings Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Add qemu_opts_validate() for post parsing validation Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Never overwrite a QemuOpt Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Add qemu_net_opts Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Port -net none and -net nic to QemuOpts Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Port -net user " Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Port -net tap " Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Port -net socket " Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Port -net vde " Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Port -net dump " Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Clean up legacy code in net_client_init() Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Port host_net_add monitor command to QemuOpts Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Port usb net " Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Port PCI NIC hotplug " Mark McLoughlin
2009-10-06 11:17 ` [Qemu-devel] [PATCH] Final net cleanup after conversion " Mark McLoughlin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1253701463-3134-25-git-send-email-markmc@redhat.com \
--to=markmc@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.