* [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del
@ 2010-03-22 9:48 Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 01/11] error: Put error definitions back in alphabetical order Markus Armbruster
` (11 more replies)
0 siblings, 12 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
v2: Avoid loss of help in parse_option_size(). Rebased.
Markus Armbruster (11):
error: Put error definitions back in alphabetical order
error: New QERR_DUPLICATE_ID
error: Convert qemu_opts_create() to QError
error: New QERR_INVALID_PARAMETER_VALUE
error: Convert qemu_opts_set() to QError
error: Drop extra messages after qemu_opts_set() and
qemu_opts_parse()
error: Use QERR_INVALID_PARAMETER_VALUE instead of
QERR_INVALID_PARAMETER
error: Convert qemu_opts_validate() to QError
error: Convert net_client_init() to QError
error: New QERR_DEVICE_IN_USE
monitor: New commands netdev_add, netdev_del
hw/pci-hotplug.c | 2 -
hw/qdev.c | 2 +-
monitor.c | 6 ++-
net.c | 95 +++++++++++++++++++++++++++++++++++++++++------------
net.h | 2 +
qemu-config.c | 1 -
qemu-monitor.hx | 30 +++++++++++++++++
qemu-option.c | 24 ++++++--------
qerror.c | 20 ++++++++++-
qerror.h | 17 ++++++++--
vl.c | 5 ---
11 files changed, 152 insertions(+), 52 deletions(-)
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH v2 01/11] error: Put error definitions back in alphabetical order
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
@ 2010-03-22 9:48 ` Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 02/11] error: New QERR_DUPLICATE_ID Markus Armbruster
` (10 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
Add suitable comments to help keerp them in order.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
qerror.c | 12 ++++++++----
qerror.h | 8 +++++---
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/qerror.c b/qerror.c
index eaa1deb..4520b0d 100644
--- a/qerror.c
+++ b/qerror.c
@@ -38,6 +38,10 @@ static const QType qerror_type = {
* for example:
*
* "running out of foo: %(foo)%%"
+ *
+ * Please keep the entries in alphabetical order.
+ * Use "sed -n '/^static.*qerror_table\[\]/,/^};/s/QERR_/&/gp' qerror.c | sort -c"
+ * to check.
*/
static const QErrorStringTable qerror_table[] = {
{
@@ -65,10 +69,6 @@ static const QErrorStringTable qerror_table[] = {
.desc = "Device '%(device)' could not be initialized",
},
{
- .error_fmt = QERR_DEVICE_NOT_ENCRYPTED,
- .desc = "Device '%(device)' is not encrypted",
- },
- {
.error_fmt = QERR_DEVICE_LOCKED,
.desc = "Device '%(device)' is locked",
},
@@ -81,6 +81,10 @@ static const QErrorStringTable qerror_table[] = {
.desc = "Device '%(device)' has not been activated by the guest",
},
{
+ .error_fmt = QERR_DEVICE_NOT_ENCRYPTED,
+ .desc = "Device '%(device)' is not encrypted",
+ },
+ {
.error_fmt = QERR_DEVICE_NOT_FOUND,
.desc = "Device '%(device)' not found",
},
diff --git a/qerror.h b/qerror.h
index dd298d4..a2664ab 100644
--- a/qerror.h
+++ b/qerror.h
@@ -46,6 +46,8 @@ QError *qobject_to_qerror(const QObject *obj);
/*
* QError class list
+ * Please keep the definitions in alphabetical order.
+ * Use "grep '^#define QERR_' qerror.h | sort -c" to check.
*/
#define QERR_BAD_BUS_FOR_DEVICE \
"{ 'class': 'BadBusForDevice', 'data': { 'device': %s, 'bad_bus_type': %s } }"
@@ -62,9 +64,6 @@ QError *qobject_to_qerror(const QObject *obj);
#define QERR_DEVICE_ENCRYPTED \
"{ 'class': 'DeviceEncrypted', 'data': { 'device': %s } }"
-#define QERR_DEVICE_NOT_ENCRYPTED \
- "{ 'class': 'DeviceNotEncrypted', 'data': { 'device': %s } }"
-
#define QERR_DEVICE_INIT_FAILED \
"{ 'class': 'DeviceInitFailed', 'data': { 'device': %s } }"
@@ -77,6 +76,9 @@ QError *qobject_to_qerror(const QObject *obj);
#define QERR_DEVICE_NOT_ACTIVE \
"{ 'class': 'DeviceNotActive', 'data': { 'device': %s } }"
+#define QERR_DEVICE_NOT_ENCRYPTED \
+ "{ 'class': 'DeviceNotEncrypted', 'data': { 'device': %s } }"
+
#define QERR_DEVICE_NOT_FOUND \
"{ 'class': 'DeviceNotFound', 'data': { 'device': %s } }"
--
1.6.6.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH v2 02/11] error: New QERR_DUPLICATE_ID
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 01/11] error: Put error definitions back in alphabetical order Markus Armbruster
@ 2010-03-22 9:48 ` Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 03/11] error: Convert qemu_opts_create() to QError Markus Armbruster
` (9 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
qerror.c | 4 ++++
qerror.h | 3 +++
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/qerror.c b/qerror.c
index 4520b0d..9fb817e 100644
--- a/qerror.c
+++ b/qerror.c
@@ -97,6 +97,10 @@ static const QErrorStringTable qerror_table[] = {
.desc = "Device '%(device)' has no child bus",
},
{
+ .error_fmt = QERR_DUPLICATE_ID,
+ .desc = "Duplicate ID '%(id)' for %(object)",
+ },
+ {
.error_fmt = QERR_FD_NOT_FOUND,
.desc = "File descriptor named '%(name)' not found",
},
diff --git a/qerror.h b/qerror.h
index a2664ab..870cdc3 100644
--- a/qerror.h
+++ b/qerror.h
@@ -88,6 +88,9 @@ QError *qobject_to_qerror(const QObject *obj);
#define QERR_DEVICE_NO_BUS \
"{ 'class': 'DeviceNoBus', 'data': { 'device': %s } }"
+#define QERR_DUPLICATE_ID \
+ "{ 'class': 'DuplicateId', 'data': { 'id': %s, 'object': %s } }"
+
#define QERR_FD_NOT_FOUND \
"{ 'class': 'FdNotFound', 'data': { 'name': %s } }"
--
1.6.6.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH v2 03/11] error: Convert qemu_opts_create() to QError
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 01/11] error: Put error definitions back in alphabetical order Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 02/11] error: New QERR_DUPLICATE_ID Markus Armbruster
@ 2010-03-22 9:48 ` Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 04/11] error: New QERR_INVALID_PARAMETER_VALUE Markus Armbruster
` (8 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
Fixes device_add to report duplicate ID properly in QMP, as
DuplicateId instead of UndefinedError.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
qemu-option.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/qemu-option.c b/qemu-option.c
index f83d07c..12ce322 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -30,6 +30,7 @@
#include "qemu-error.h"
#include "qemu-objects.h"
#include "qemu-option.h"
+#include "qerror.h"
/*
* Extracts the name of an option from the parameter string (p points at the
@@ -643,8 +644,7 @@ QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id, int fail_if_exist
opts = qemu_opts_find(list, id);
if (opts != NULL) {
if (fail_if_exists) {
- fprintf(stderr, "tried to create id \"%s\" twice for \"%s\"\n",
- id, list->name);
+ qerror_report(QERR_DUPLICATE_ID, id, list->name);
return NULL;
} else {
return opts;
--
1.6.6.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH v2 04/11] error: New QERR_INVALID_PARAMETER_VALUE
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
` (2 preceding siblings ...)
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 03/11] error: Convert qemu_opts_create() to QError Markus Armbruster
@ 2010-03-22 9:48 ` Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 05/11] error: Convert qemu_opts_set() to QError Markus Armbruster
` (7 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
qerror.c | 4 ++++
qerror.h | 3 +++
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/qerror.c b/qerror.c
index 9fb817e..97e8d4a 100644
--- a/qerror.c
+++ b/qerror.c
@@ -121,6 +121,10 @@ static const QErrorStringTable qerror_table[] = {
.desc = "Invalid parameter type, expected: %(expected)",
},
{
+ .error_fmt = QERR_INVALID_PARAMETER_VALUE,
+ .desc = "Parameter '%(name)' expects %(expected)",
+ },
+ {
.error_fmt = QERR_INVALID_PASSWORD,
.desc = "Password incorrect",
},
diff --git a/qerror.h b/qerror.h
index 870cdc3..5625d54 100644
--- a/qerror.h
+++ b/qerror.h
@@ -106,6 +106,9 @@ QError *qobject_to_qerror(const QObject *obj);
#define QERR_INVALID_PARAMETER_TYPE \
"{ 'class': 'InvalidParameterType', 'data': { 'name': %s,'expected': %s } }"
+#define QERR_INVALID_PARAMETER_VALUE \
+ "{ 'class': 'InvalidParameterValue', 'data': { 'name': %s, 'expected': %s } }"
+
#define QERR_INVALID_PASSWORD \
"{ 'class': 'InvalidPassword', 'data': {} }"
--
1.6.6.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH v2 05/11] error: Convert qemu_opts_set() to QError
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
` (3 preceding siblings ...)
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 04/11] error: New QERR_INVALID_PARAMETER_VALUE Markus Armbruster
@ 2010-03-22 9:48 ` Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 06/11] error: Drop extra messages after qemu_opts_set() and qemu_opts_parse() Markus Armbruster
` (6 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
qemu-option.c | 17 +++++++----------
1 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/qemu-option.c b/qemu-option.c
index 12ce322..394c763 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -176,7 +176,7 @@ static int parse_option_bool(const char *name, const char *value, int *ret)
} else if (!strcmp(value, "off")) {
*ret = 0;
} else {
- fprintf(stderr, "Option '%s': Use 'on' or 'off'\n", name);
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "'on' or 'off'");
return -1;
}
} else {
@@ -193,12 +193,12 @@ static int parse_option_number(const char *name, const char *value, uint64_t *re
if (value != NULL) {
number = strtoull(value, &postfix, 0);
if (*postfix != '\0') {
- fprintf(stderr, "Option '%s' needs a number as parameter\n", name);
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a number");
return -1;
}
*ret = number;
} else {
- fprintf(stderr, "Option '%s' needs a parameter\n", name);
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a number");
return -1;
}
return 0;
@@ -226,13 +226,13 @@ static int parse_option_size(const char *name, const char *value, uint64_t *ret)
*ret = (uint64_t) sizef;
break;
default:
- fprintf(stderr, "Option '%s' needs size as parameter\n", name);
- fprintf(stderr, "You may use k, M, G or T suffixes for "
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a size");
+ error_printf_unless_qmp("You may use k, M, G or T suffixes for "
"kilobytes, megabytes, gigabytes and terabytes.\n");
return -1;
}
} else {
- fprintf(stderr, "Option '%s' needs a parameter\n", name);
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a size");
return -1;
}
return 0;
@@ -581,8 +581,7 @@ int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
if (i == 0) {
/* empty list -> allow any */;
} else {
- fprintf(stderr, "option \"%s\" is not valid for %s\n",
- name, opts->list->name);
+ qerror_report(QERR_INVALID_PARAMETER, name);
return -1;
}
}
@@ -598,8 +597,6 @@ int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
opt->str = qemu_strdup(value);
}
if (qemu_opt_parse(opt) < 0) {
- fprintf(stderr, "Failed to parse \"%s\" for \"%s.%s\"\n", opt->str,
- opts->list->name, opt->name);
qemu_opt_del(opt);
return -1;
}
--
1.6.6.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH v2 06/11] error: Drop extra messages after qemu_opts_set() and qemu_opts_parse()
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
` (4 preceding siblings ...)
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 05/11] error: Convert qemu_opts_set() to QError Markus Armbruster
@ 2010-03-22 9:48 ` Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 07/11] error: Use QERR_INVALID_PARAMETER_VALUE instead of QERR_INVALID_PARAMETER Markus Armbruster
` (5 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
Both functions report errors nicely enough now, no need for additional
messages.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
hw/pci-hotplug.c | 2 --
net.c | 2 --
qemu-config.c | 1 -
vl.c | 5 -----
4 files changed, 0 insertions(+), 10 deletions(-)
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index eb3701b..343fd17 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -56,8 +56,6 @@ static PCIDevice *qemu_pci_hot_add_nic(Monitor *mon,
opts = qemu_opts_parse(&qemu_net_opts, opts_str ? opts_str : "", 0);
if (!opts) {
- monitor_printf(mon, "parsing network options '%s' failed\n",
- opts_str ? opts_str : "");
return NULL;
}
diff --git a/net.c b/net.c
index 1092bdc..9338f35 100644
--- a/net.c
+++ b/net.c
@@ -1161,8 +1161,6 @@ void net_host_device_add(Monitor *mon, const QDict *qdict)
opts = qemu_opts_parse(&qemu_net_opts, opts_str ? opts_str : "", 0);
if (!opts) {
- monitor_printf(mon, "parsing network options '%s' failed\n",
- opts_str ? opts_str : "");
return;
}
diff --git a/qemu-config.c b/qemu-config.c
index 150157c..d4a2f43 100644
--- a/qemu-config.c
+++ b/qemu-config.c
@@ -472,7 +472,6 @@ int qemu_config_parse(FILE *fp, const char *fname)
goto out;
}
if (qemu_opt_set(opts, arg, value) != 0) {
- error_report("failed to set \"%s\" for %s", arg, group);
goto out;
}
continue;
diff --git a/vl.c b/vl.c
index d69250c..35ab34f 100644
--- a/vl.c
+++ b/vl.c
@@ -766,8 +766,6 @@ QemuOpts *drive_add(const char *file, const char *fmt, ...)
opts = qemu_opts_parse(&qemu_drive_opts, optstr, 0);
if (!opts) {
- fprintf(stderr, "%s: huh? duplicate? (%s)\n",
- __FUNCTION__, optstr);
return NULL;
}
if (file)
@@ -4244,7 +4242,6 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_mon:
opts = qemu_opts_parse(&qemu_mon_opts, optarg, 1);
if (!opts) {
- fprintf(stderr, "parse error: %s\n", optarg);
exit(1);
}
default_monitor = 0;
@@ -4252,7 +4249,6 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_chardev:
opts = qemu_opts_parse(&qemu_chardev_opts, optarg, 1);
if (!opts) {
- fprintf(stderr, "parse error: %s\n", optarg);
exit(1);
}
break;
@@ -4464,7 +4460,6 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_rtc:
opts = qemu_opts_parse(&qemu_rtc_opts, optarg, 0);
if (!opts) {
- fprintf(stderr, "parse error: %s\n", optarg);
exit(1);
}
configure_rtc(opts);
--
1.6.6.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH v2 07/11] error: Use QERR_INVALID_PARAMETER_VALUE instead of QERR_INVALID_PARAMETER
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
` (5 preceding siblings ...)
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 06/11] error: Drop extra messages after qemu_opts_set() and qemu_opts_parse() Markus Armbruster
@ 2010-03-22 9:48 ` Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 08/11] error: Convert qemu_opts_validate() to QError Markus Armbruster
` (4 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
hw/qdev.c | 2 +-
monitor.c | 6 ++++--
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/hw/qdev.c b/hw/qdev.c
index 17a46a7..f45ed0f 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -207,7 +207,7 @@ DeviceState *qdev_device_add(QemuOpts *opts)
/* find driver */
info = qdev_find_info(NULL, driver);
if (!info || info->no_user) {
- qerror_report(QERR_INVALID_PARAMETER, "driver");
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver", "a driver name");
error_printf_unless_qmp("Try with argument '?' for a list.\n");
return NULL;
}
diff --git a/monitor.c b/monitor.c
index 822dc27..35cbce7 100644
--- a/monitor.c
+++ b/monitor.c
@@ -970,7 +970,8 @@ static int do_cpu_set(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
int index = qdict_get_int(qdict, "index");
if (mon_set_cpu(index) < 0) {
- qerror_report(QERR_INVALID_PARAMETER, "index");
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, "index",
+ "a CPU number");
return -1;
}
return 0;
@@ -2489,7 +2490,8 @@ static int do_getfd(Monitor *mon, const QDict *qdict, QObject **ret_data)
}
if (qemu_isdigit(fdname[0])) {
- qerror_report(QERR_INVALID_PARAMETER, "fdname");
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, "fdname",
+ "a name not starting with a digit");
return -1;
}
--
1.6.6.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH v2 08/11] error: Convert qemu_opts_validate() to QError
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
` (6 preceding siblings ...)
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 07/11] error: Use QERR_INVALID_PARAMETER_VALUE instead of QERR_INVALID_PARAMETER Markus Armbruster
@ 2010-03-22 9:48 ` Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 09/11] error: Convert net_client_init() " Markus Armbruster
` (3 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
qemu-option.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/qemu-option.c b/qemu-option.c
index 394c763..1ffc497 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -877,8 +877,7 @@ int qemu_opts_validate(QemuOpts *opts, const QemuOptDesc *desc)
}
}
if (desc[i].name == NULL) {
- fprintf(stderr, "option \"%s\" is not valid for %s\n",
- opt->name, opts->list->name);
+ qerror_report(QERR_INVALID_PARAMETER, opt->name);
return -1;
}
--
1.6.6.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH v2 09/11] error: Convert net_client_init() to QError
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
` (7 preceding siblings ...)
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 08/11] error: Convert qemu_opts_validate() to QError Markus Armbruster
@ 2010-03-22 9:48 ` Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 10/11] error: New QERR_DEVICE_IN_USE Markus Armbruster
` (2 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
The conversion is shallow: client type init() methods aren't
converted. Converting them is a big job for relatively little
practical benefit, so leave it for later.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
net.c | 38 ++++++++++++++++++--------------------
1 files changed, 18 insertions(+), 20 deletions(-)
diff --git a/net.c b/net.c
index 9338f35..1f3c39c 100644
--- a/net.c
+++ b/net.c
@@ -1057,18 +1057,12 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
int i;
type = qemu_opt_get(opts, "type");
+ if (!type) {
+ qerror_report(QERR_MISSING_PARAMETER, "type");
+ return -1;
+ }
- if (!is_netdev) {
- if (!type) {
- error_report("No type specified for -net");
- return -1;
- }
- } else {
- if (!type) {
- error_report("No type specified for -netdev");
- return -1;
- }
-
+ if (is_netdev) {
if (strcmp(type, "tap") != 0 &&
#ifdef CONFIG_SLIRP
strcmp(type, "user") != 0 &&
@@ -1077,21 +1071,21 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
strcmp(type, "vde") != 0 &&
#endif
strcmp(type, "socket") != 0) {
- error_report("The '%s' network backend type is not valid with -netdev",
- type);
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, "type",
+ "a netdev backend type");
return -1;
}
if (qemu_opt_get(opts, "vlan")) {
- error_report("The 'vlan' parameter is not valid with -netdev");
+ qerror_report(QERR_INVALID_PARAMETER, "vlan");
return -1;
}
if (qemu_opt_get(opts, "name")) {
- error_report("The 'name' parameter is not valid with -netdev");
+ qerror_report(QERR_INVALID_PARAMETER, "name");
return -1;
}
if (!qemu_opts_id(opts)) {
- error_report("The id= parameter is required with -netdev");
+ qerror_report(QERR_MISSING_PARAMETER, "id");
return -1;
}
}
@@ -1117,14 +1111,18 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
}
if (net_client_types[i].init) {
- return net_client_types[i].init(opts, mon, name, vlan);
- } else {
- return 0;
+ if (net_client_types[i].init(opts, mon, name, vlan) < 0) {
+ /* TODO push error reporting into init() methods */
+ qerror_report(QERR_DEVICE_INIT_FAILED, type);
+ return -1;
+ }
}
+ return 0;
}
}
- error_report("Invalid -net type '%s'", type);
+ qerror_report(QERR_INVALID_PARAMETER_VALUE, "type",
+ "a network backend type");
return -1;
}
--
1.6.6.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH v2 10/11] error: New QERR_DEVICE_IN_USE
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
` (8 preceding siblings ...)
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 09/11] error: Convert net_client_init() " Markus Armbruster
@ 2010-03-22 9:48 ` Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 11/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
2010-03-22 10:20 ` [Qemu-devel] Re: [PATCH v2 00/11] " Markus Armbruster
11 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
qerror.c | 4 ++++
qerror.h | 3 +++
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/qerror.c b/qerror.c
index 97e8d4a..8d885cd 100644
--- a/qerror.c
+++ b/qerror.c
@@ -69,6 +69,10 @@ static const QErrorStringTable qerror_table[] = {
.desc = "Device '%(device)' could not be initialized",
},
{
+ .error_fmt = QERR_DEVICE_IN_USE,
+ .desc = "Device '%(device)' is in use",
+ },
+ {
.error_fmt = QERR_DEVICE_LOCKED,
.desc = "Device '%(device)' is locked",
},
diff --git a/qerror.h b/qerror.h
index 5625d54..bae08c0 100644
--- a/qerror.h
+++ b/qerror.h
@@ -67,6 +67,9 @@ QError *qobject_to_qerror(const QObject *obj);
#define QERR_DEVICE_INIT_FAILED \
"{ 'class': 'DeviceInitFailed', 'data': { 'device': %s } }"
+#define QERR_DEVICE_IN_USE \
+ "{ 'class': 'DeviceInUse', 'data': { 'device': %s } }"
+
#define QERR_DEVICE_LOCKED \
"{ 'class': 'DeviceLocked', 'data': { 'device': %s } }"
--
1.6.6.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH v2 11/11] monitor: New commands netdev_add, netdev_del
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
` (9 preceding siblings ...)
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 10/11] error: New QERR_DEVICE_IN_USE Markus Armbruster
@ 2010-03-22 9:48 ` Markus Armbruster
2010-03-23 22:06 ` [Qemu-devel] " Luiz Capitulino
2010-03-22 10:20 ` [Qemu-devel] Re: [PATCH v2 00/11] " Markus Armbruster
11 siblings, 1 reply; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 9:48 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
Monitor commands to go with -netdev.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
net.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
net.h | 2 +
qemu-monitor.hx | 30 ++++++++++++++++++++++++++++
3 files changed, 88 insertions(+), 1 deletions(-)
diff --git a/net.c b/net.c
index 1f3c39c..80e9025 100644
--- a/net.c
+++ b/net.c
@@ -1122,7 +1122,7 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
}
qerror_report(QERR_INVALID_PARAMETER_VALUE, "type",
- "a network backend type");
+ "a network client type");
return -1;
}
@@ -1186,6 +1186,61 @@ void net_host_device_remove(Monitor *mon, const QDict *qdict)
qemu_del_vlan_client(vc);
}
+/**
+ * do_netdev_add(): Add a host network device
+ *
+ * Argument qdict contains
+ * - "type": the device type, "tap", "user", ...
+ * - "id": the device's ID (must be unique)
+ * - device options
+ *
+ * Example:
+ *
+ * { "type": "user", "id": "netdev1", "hostname": "a-guest" }
+ */
+int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
+{
+ QemuOpts *opts;
+ int res;
+
+ opts = qemu_opts_from_qdict(&qemu_netdev_opts, qdict);
+ if (!opts) {
+ return -1;
+ }
+
+ res = net_client_init(mon, opts, 1);
+ qemu_opts_del(opts);
+ return res;
+}
+
+/**
+ * do_netdev_del(): Delete a host network device
+ *
+ * Argument qdict contains
+ * - "id": the device's ID
+ *
+ * Example:
+ *
+ * { "id": "netdev1" }
+ */
+int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
+{
+ const char *id = qdict_get_str(qdict, "id");
+ VLANClientState *vc;
+
+ vc = qemu_find_netdev(id);
+ if (!vc || vc->info->type == NET_CLIENT_TYPE_NIC) {
+ qerror_report(QERR_DEVICE_NOT_FOUND, id);
+ return -1;
+ }
+ if (vc->peer) {
+ qerror_report(QERR_DEVICE_IN_USE, id);
+ return -1;
+ }
+ qemu_del_vlan_client(vc);
+ return 0;
+}
+
void net_set_boot_mask(int net_boot_mask)
{
int i;
diff --git a/net.h b/net.h
index 16f19c5..ce9e2c6 100644
--- a/net.h
+++ b/net.h
@@ -166,6 +166,8 @@ void net_cleanup(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);
+int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
+int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
#define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index 5308f36..ff5f099 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -913,6 +913,36 @@ STEXI
Remove host VLAN client.
ETEXI
+ {
+ .name = "netdev_add",
+ .args_type = "netdev:O",
+ .params = "[user|tap|socket],id=str[,prop=value][,...]",
+ .help = "add host network device",
+ .user_print = monitor_user_noop,
+ .mhandler.cmd_new = do_netdev_add,
+ },
+
+STEXI
+@item netdev_add
+@findex netdev_add
+Add host network device.
+ETEXI
+
+ {
+ .name = "netdev_del",
+ .args_type = "id:s",
+ .params = "id",
+ .help = "remove host network device",
+ .user_print = monitor_user_noop,
+ .mhandler.cmd_new = do_netdev_del,
+ },
+
+STEXI
+@item netdev_del
+@findex netdev_del
+Remove host network device.
+ETEXI
+
#ifdef CONFIG_SLIRP
{
.name = "hostfwd_add",
--
1.6.6.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] Re: [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
` (10 preceding siblings ...)
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 11/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
@ 2010-03-22 10:20 ` Markus Armbruster
11 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-22 10:20 UTC (permalink / raw)
To: qemu-devel; +Cc: lcapitulino
Note: This series depends on "[PATCH v2 0/6] error: Clean up after
recent changes".
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Qemu-devel] Re: [PATCH v2 11/11] monitor: New commands netdev_add, netdev_del
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 11/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
@ 2010-03-23 22:06 ` Luiz Capitulino
2010-03-25 15:52 ` Markus Armbruster
0 siblings, 1 reply; 15+ messages in thread
From: Luiz Capitulino @ 2010-03-23 22:06 UTC (permalink / raw)
To: Markus Armbruster; +Cc: qemu-devel
On Mon, 22 Mar 2010 10:48:53 +0100
Markus Armbruster <armbru@redhat.com> wrote:
> Monitor commands to go with -netdev.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
> net.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
> net.h | 2 +
> qemu-monitor.hx | 30 ++++++++++++++++++++++++++++
> 3 files changed, 88 insertions(+), 1 deletions(-)
>
> diff --git a/net.c b/net.c
> index 1f3c39c..80e9025 100644
> --- a/net.c
> +++ b/net.c
> @@ -1122,7 +1122,7 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
> }
>
> qerror_report(QERR_INVALID_PARAMETER_VALUE, "type",
> - "a network backend type");
> + "a network client type");
> return -1;
> }
>
> @@ -1186,6 +1186,61 @@ void net_host_device_remove(Monitor *mon, const QDict *qdict)
> qemu_del_vlan_client(vc);
> }
>
> +/**
> + * do_netdev_add(): Add a host network device
> + *
> + * Argument qdict contains
> + * - "type": the device type, "tap", "user", ...
> + * - "id": the device's ID (must be unique)
Consecutive calls of this command in qmp with the same id succeeds, but
I couldn't understand why.
Other than that looks ok, although I'm not familiar with the device
handling machinery in qemu.
> + * - device options
> + *
> + * Example:
> + *
> + * { "type": "user", "id": "netdev1", "hostname": "a-guest" }
> + */
> +int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
> +{
> + QemuOpts *opts;
> + int res;
> +
> + opts = qemu_opts_from_qdict(&qemu_netdev_opts, qdict);
> + if (!opts) {
> + return -1;
> + }
> +
> + res = net_client_init(mon, opts, 1);
> + qemu_opts_del(opts);
> + return res;
> +}
> +
> +/**
> + * do_netdev_del(): Delete a host network device
> + *
> + * Argument qdict contains
> + * - "id": the device's ID
> + *
> + * Example:
> + *
> + * { "id": "netdev1" }
> + */
> +int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
> +{
> + const char *id = qdict_get_str(qdict, "id");
> + VLANClientState *vc;
> +
> + vc = qemu_find_netdev(id);
> + if (!vc || vc->info->type == NET_CLIENT_TYPE_NIC) {
> + qerror_report(QERR_DEVICE_NOT_FOUND, id);
> + return -1;
> + }
> + if (vc->peer) {
> + qerror_report(QERR_DEVICE_IN_USE, id);
> + return -1;
> + }
> + qemu_del_vlan_client(vc);
> + return 0;
> +}
> +
> void net_set_boot_mask(int net_boot_mask)
> {
> int i;
> diff --git a/net.h b/net.h
> index 16f19c5..ce9e2c6 100644
> --- a/net.h
> +++ b/net.h
> @@ -166,6 +166,8 @@ void net_cleanup(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);
> +int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
> +int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
>
> #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
> #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
> diff --git a/qemu-monitor.hx b/qemu-monitor.hx
> index 5308f36..ff5f099 100644
> --- a/qemu-monitor.hx
> +++ b/qemu-monitor.hx
> @@ -913,6 +913,36 @@ STEXI
> Remove host VLAN client.
> ETEXI
>
> + {
> + .name = "netdev_add",
> + .args_type = "netdev:O",
> + .params = "[user|tap|socket],id=str[,prop=value][,...]",
> + .help = "add host network device",
> + .user_print = monitor_user_noop,
> + .mhandler.cmd_new = do_netdev_add,
> + },
> +
> +STEXI
> +@item netdev_add
> +@findex netdev_add
> +Add host network device.
> +ETEXI
> +
> + {
> + .name = "netdev_del",
> + .args_type = "id:s",
> + .params = "id",
> + .help = "remove host network device",
> + .user_print = monitor_user_noop,
> + .mhandler.cmd_new = do_netdev_del,
> + },
> +
> +STEXI
> +@item netdev_del
> +@findex netdev_del
> +Remove host network device.
> +ETEXI
> +
> #ifdef CONFIG_SLIRP
> {
> .name = "hostfwd_add",
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Qemu-devel] Re: [PATCH v2 11/11] monitor: New commands netdev_add, netdev_del
2010-03-23 22:06 ` [Qemu-devel] " Luiz Capitulino
@ 2010-03-25 15:52 ` Markus Armbruster
0 siblings, 0 replies; 15+ messages in thread
From: Markus Armbruster @ 2010-03-25 15:52 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: qemu-devel
Luiz Capitulino <lcapitulino@redhat.com> writes:
> On Mon, 22 Mar 2010 10:48:53 +0100
> Markus Armbruster <armbru@redhat.com> wrote:
>
>> Monitor commands to go with -netdev.
>>
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>> net.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
>> net.h | 2 +
>> qemu-monitor.hx | 30 ++++++++++++++++++++++++++++
>> 3 files changed, 88 insertions(+), 1 deletions(-)
>>
>> diff --git a/net.c b/net.c
>> index 1f3c39c..80e9025 100644
>> --- a/net.c
>> +++ b/net.c
>> @@ -1122,7 +1122,7 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
>> }
>>
>> qerror_report(QERR_INVALID_PARAMETER_VALUE, "type",
>> - "a network backend type");
>> + "a network client type");
>> return -1;
>> }
>>
>> @@ -1186,6 +1186,61 @@ void net_host_device_remove(Monitor *mon, const QDict *qdict)
>> qemu_del_vlan_client(vc);
>> }
>>
>> +/**
>> + * do_netdev_add(): Add a host network device
>> + *
>> + * Argument qdict contains
>> + * - "type": the device type, "tap", "user", ...
>> + * - "id": the device's ID (must be unique)
>
> Consecutive calls of this command in qmp with the same id succeeds, but
> I couldn't understand why.
Thinko. I'll respin.
> Other than that looks ok, although I'm not familiar with the device
> handling machinery in qemu.
v3's the charm, I hope.
Thanks!
[...]
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2010-03-25 15:52 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-03-22 9:48 [Qemu-devel] [PATCH v2 00/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 01/11] error: Put error definitions back in alphabetical order Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 02/11] error: New QERR_DUPLICATE_ID Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 03/11] error: Convert qemu_opts_create() to QError Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 04/11] error: New QERR_INVALID_PARAMETER_VALUE Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 05/11] error: Convert qemu_opts_set() to QError Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 06/11] error: Drop extra messages after qemu_opts_set() and qemu_opts_parse() Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 07/11] error: Use QERR_INVALID_PARAMETER_VALUE instead of QERR_INVALID_PARAMETER Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 08/11] error: Convert qemu_opts_validate() to QError Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 09/11] error: Convert net_client_init() " Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 10/11] error: New QERR_DEVICE_IN_USE Markus Armbruster
2010-03-22 9:48 ` [Qemu-devel] [PATCH v2 11/11] monitor: New commands netdev_add, netdev_del Markus Armbruster
2010-03-23 22:06 ` [Qemu-devel] " Luiz Capitulino
2010-03-25 15:52 ` Markus Armbruster
2010-03-22 10:20 ` [Qemu-devel] Re: [PATCH v2 00/11] " Markus Armbruster
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.