]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: improve error reporting in virNetDevVPortProfileGetStatus
authorLaine Stump <laine@laine.org>
Fri, 18 Dec 2015 21:40:29 +0000 (16:40 -0500)
committerLaine Stump <laine@laine.org>
Mon, 4 Jan 2016 20:15:20 +0000 (15:15 -0500)
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

index d0d455208ca9979bb2329db0f4c73c9a914b3dc7..61676b4cc6a62c26a65f01394e6014e82c31ecf5 100644 (file)
@@ -558,10 +558,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",