summaryrefslogtreecommitdiff
path: root/net.c
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2010-03-25 17:22:40 +0100
committerAurelien Jarno <aurelien@aurel32.net>2010-04-18 23:55:16 +0200
commitae82d3242d9db904f8ab81a5c7d796ae2eb46f04 (patch)
tree11590aa8680b6bcd349d5981e34d8162fecd6f33 /net.c
parent5124eb5927d4d90adc5640e5d36a589bfadd1828 (diff)
monitor: New commands netdev_add, netdev_del
Monitor commands to go with -netdev. Signed-off-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Diffstat (limited to 'net.c')
-rw-r--r--net.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/net.c b/net.c
index 1840dd7a9..e00fac90b 100644
--- a/net.c
+++ b/net.c
@@ -1194,6 +1194,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);
+ 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);
+ qemu_opts_del(qemu_opts_find(&qemu_netdev_opts, id));
+ return 0;
+}
+
void do_info_network(Monitor *mon)
{
VLANState *vlan;