[libvirt] [PATCH 3/5] util: improve error reporting in virNetDevVPortProfileGetStatus

Laine Stump laine at laine.org
Mon Dec 21 17:17:55 UTC 2015


The previous error message just indicated that the desired response
couldn't be found, this patch tells what was desired, as well as
listing out the entire table that had been in the netlink response, to
give some kind of idea why it failed.
---
 src/util/virnetdevvportprofile.c | 39 +++++++++++++++++++++++++++++++++++----
 1 file changed, 35 insertions(+), 4 deletions(-)

diff --git a/src/util/virnetdevvportprofile.c b/src/util/virnetdevvportprofile.c
index 427c67b..f4b876f 100644
--- a/src/util/virnetdevvportprofile.c
+++ b/src/util/virnetdevvportprofile.c
@@ -566,10 +566,41 @@ virNetDevVPortProfileGetStatus(struct nlattr **tb, int32_t vf,
             }
 
             if (!found) {
-                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                               _("Could not find netlink response with "
-                                 "expected parameters"));
-                goto cleanup;
+                char instanceIdStr[VIR_UUID_STRING_BUFLEN] = "(none)";
+
+                if (instanceId)
+                   virUUIDFormat(instanceId, instanceIdStr);
+
+                virReportError(VIR_ERR_INTERNAL_ERROR,
+                               _("Could not find vf/instanceId %u/%s "
+                                 " in netlink response"),
+                               vf, instanceIdStr);
+
+                /* go through all the entries again. This seems tedious,
+                 * but experience has shown the resulting log to be
+                 * very useful.
+                 */
+                VIR_WARN("IFLA_VF_PORTS entries that were returned:");
+                nla_for_each_nested(tb_vf_ports, tb[IFLA_VF_PORTS], rem) {
+                    char uuidstr[VIR_UUID_STRING_BUFLEN] = "(none)";
+
+                    if (nla_parse_nested(tb_port, IFLA_PORT_MAX, tb_vf_ports,
+                                         ifla_port_policy)) {
+                        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                                       _("error parsing IFLA_VF_PORT "
+                                         "during error reporting"));
+                        goto cleanup;
+                    }
+                    if (tb_port[IFLA_PORT_INSTANCE_UUID]) {
+                        virUUIDFormat((unsigned char *)
+                                      RTA_DATA(tb_port[IFLA_PORT_INSTANCE_UUID]),
+                                      uuidstr);
+                    }
+                    VIR_WARN("  vf: %d uuid: %s",
+                             tb_port[IFLA_PORT_VF] ?
+                             *(uint32_t *)RTA_DATA(tb_port[IFLA_PORT_VF]) : -1,
+                             uuidstr);
+                }                goto cleanup;
             }
         } else {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-- 
2.5.0




More information about the libvir-list mailing list