]> git.proxmox.com Git - pve-qemu-kvm.git/blobdiff - debian/patches/pve/0024-qmp-add-get_link_status.patch
update to 2.7
[pve-qemu-kvm.git] / debian / patches / pve / 0024-qmp-add-get_link_status.patch
diff --git a/debian/patches/pve/0024-qmp-add-get_link_status.patch b/debian/patches/pve/0024-qmp-add-get_link_status.patch
new file mode 100644 (file)
index 0000000..fa88704
--- /dev/null
@@ -0,0 +1,126 @@
+From 7e58a86c836514745590e4f4d280841c4808a022 Mon Sep 17 00:00:00 2001
+From: Wolfgang Bumiller <w.bumiller@proxmox.com>
+Date: Wed, 9 Dec 2015 16:34:41 +0100
+Subject: [PATCH 24/41] qmp: add get_link_status
+
+---
+ net/net.c        | 27 +++++++++++++++++++++++++++
+ qapi-schema.json | 15 +++++++++++++++
+ qmp-commands.hx  | 23 +++++++++++++++++++++++
+ scripts/qapi.py  |  2 ++
+ 4 files changed, 67 insertions(+)
+
+diff --git a/net/net.c b/net/net.c
+index d51cb29..c94d93d 100644
+--- a/net/net.c
++++ b/net/net.c
+@@ -1362,6 +1362,33 @@ void hmp_info_network(Monitor *mon, const QDict *qdict)
+     }
+ }
++int64_t qmp_get_link_status(const char *name, Error **errp)
++{
++    NetClientState *ncs[MAX_QUEUE_NUM];
++    NetClientState *nc;
++    int queues;
++    bool ret;
++
++    queues = qemu_find_net_clients_except(name, ncs,
++                                          NET_CLIENT_DRIVER__MAX,
++                                          MAX_QUEUE_NUM);
++
++    if (queues == 0) {
++        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
++                  "Device '%s' not found", name);
++        return (int64_t) -1;
++    }
++
++    nc = ncs[0];
++    ret = ncs[0]->link_down;
++
++    if (nc->peer->info->type == NET_CLIENT_DRIVER_NIC) {
++      ret = ncs[0]->peer->link_down;
++    }
++
++    return (int64_t) ret ? 0 : 1;
++}
++
+ void qmp_set_link(const char *name, bool up, Error **errp)
+ {
+     NetClientState *ncs[MAX_QUEUE_NUM];
+diff --git a/qapi-schema.json b/qapi-schema.json
+index 0c0faf7..d75e932 100644
+--- a/qapi-schema.json
++++ b/qapi-schema.json
+@@ -1786,6 +1786,21 @@
+ { 'command': 'set_link', 'data': {'name': 'str', 'up': 'bool'} }
+ ##
++# @get_link_status
++#
++# Get the current link state of the nics or nic.
++#
++# @name: name of the nic you get the state of
++#
++# Return: If link is up 1
++#         If link is down 0
++#         If an error occure an empty string.
++#
++# Notes: this is an Proxmox VE extension and not offical part of Qemu.
++##
++{ 'command': 'get_link_status', 'data': {'name': 'str'}, 'returns': 'int'}
++
++##
+ # @balloon:
+ #
+ # Request the balloon driver to change its balloon size.
+diff --git a/qmp-commands.hx b/qmp-commands.hx
+index 6342cd2..a84932a 100644
+--- a/qmp-commands.hx
++++ b/qmp-commands.hx
+@@ -1883,6 +1883,29 @@ Example:
+ EQMP
+     {
++        .name       = "get_link_status",
++        .args_type  = "name:s",
++        .mhandler.cmd_new = qmp_marshal_get_link_status,
++    },
++
++SQMP
++get_link_status
++--------
++
++Get the link status of a network adapter.
++
++Arguments:
++
++- "name": network device name (json-string)
++
++Example:
++
++-> { "execute": "get_link_status", "arguments": { "name": "e1000.0" } }
++<- { "return": {1} }
++
++EQMP
++
++    {
+         .name       = "getfd",
+         .args_type  = "fdname:s",
+         .params     = "getfd name",
+diff --git a/scripts/qapi.py b/scripts/qapi.py
+index 21bc32f..f900659 100644
+--- a/scripts/qapi.py
++++ b/scripts/qapi.py
+@@ -39,6 +39,8 @@ builtin_types = {
+ # Whitelist of commands allowed to return a non-dictionary
+ returns_whitelist = [
++    'get_link_status',
++
+     # From QMP:
+     'human-monitor-command',
+     'qom-get',
+-- 
+2.1.4
+