]> xenbits.xensource.com Git - libvirt.git/commitdiff
virDomainInterfaceStats: Accept MAC address too
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 13 Oct 2017 20:25:42 +0000 (13:25 -0700)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 13 Oct 2017 20:46:59 +0000 (13:46 -0700)
https://bugzilla.redhat.com/show_bug.cgi?id=1497396

The other APIs accept both, ifname and MAC address. There's no
reason virDomainInterfaceStats can't do the same.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
14 files changed:
include/libvirt/libvirt-domain.h
src/driver-hypervisor.h
src/libvirt-domain.c
src/libxl/libxl_driver.c
src/lxc/lxc_driver.c
src/openvz/openvz_driver.c
src/qemu/qemu_driver.c
src/remote/remote_protocol.x
src/remote_protocol-structs
src/test/test_driver.c
src/vz/vz_driver.c
src/vz/vz_sdk.c
src/xen/xen_driver.c
tools/virsh.pod

index b181c0be4d1f05a786d9b36273deb41abeceb379..9fb94a9837df071336cfecf040cb4d1b2cfd98a4 100644 (file)
@@ -1571,7 +1571,7 @@ int                     virDomainBlockStatsFlags (virDomainPtr dom,
                                                   int *nparams,
                                                   unsigned int flags);
 int                     virDomainInterfaceStats (virDomainPtr dom,
-                                                 const char *path,
+                                                 const char *device,
                                                  virDomainInterfaceStatsPtr stats,
                                                  size_t size);
 
index 6c3f7d7957e3962b406d9b7604600de0b95bf0ca..4de0581c3f1a99b85db0cd396d737094a58c2db2 100644 (file)
@@ -486,7 +486,7 @@ typedef int
 
 typedef int
 (*virDrvDomainInterfaceStats)(virDomainPtr domain,
-                              const char *path,
+                              const char *device,
                               virDomainInterfaceStatsPtr stats);
 
 typedef int
index d2d022a664cc9b7aeb19f4d4add94f119419fc2f..fc2e4ce381197fe70d8246191d6bba4bf75e6add 100644 (file)
@@ -5507,14 +5507,15 @@ virDomainBlockStatsFlags(virDomainPtr dom,
 /**
  * virDomainInterfaceStats:
  * @dom: pointer to the domain object
- * @path: path to the interface
+ * @device: the interface name or MAC address
  * @stats: network interface stats (returned)
  * @size: size of stats structure
  *
  * This function returns network interface stats for interfaces
  * attached to the domain.
  *
- * The path parameter is the name of the network interface.
+ * The @device parameter is the network interface either by name or MAC
+ * address.
  *
  * Domains may have more than one network interface.  To get stats for
  * each you should make multiple calls to this function.
@@ -5528,20 +5529,20 @@ virDomainBlockStatsFlags(virDomainPtr dom,
  * Returns: 0 in case of success or -1 in case of failure.
  */
 int
-virDomainInterfaceStats(virDomainPtr dom, const char *path,
+virDomainInterfaceStats(virDomainPtr dom, const char *device,
                         virDomainInterfaceStatsPtr stats, size_t size)
 {
     virConnectPtr conn;
     virDomainInterfaceStatsStruct stats2 = { -1, -1, -1, -1,
                                              -1, -1, -1, -1 };
 
-    VIR_DOMAIN_DEBUG(dom, "path=%s, stats=%p, size=%zi",
-                     path, stats, size);
+    VIR_DOMAIN_DEBUG(dom, "device=%s, stats=%p, size=%zi",
+                     device, stats, size);
 
     virResetLastError();
 
     virCheckDomainReturn(dom, -1);
-    virCheckNonNullArgGoto(path, error);
+    virCheckNonNullArgGoto(device, error);
     virCheckNonNullArgGoto(stats, error);
     if (size > sizeof(stats2)) {
         virReportInvalidArg(size,
@@ -5553,7 +5554,7 @@ virDomainInterfaceStats(virDomainPtr dom, const char *path,
     conn = dom->conn;
 
     if (conn->driver->domainInterfaceStats) {
-        if (conn->driver->domainInterfaceStats(dom, path, &stats2) == -1)
+        if (conn->driver->domainInterfaceStats(dom, device, &stats2) == -1)
             goto error;
 
         memcpy(stats, &stats2, size);
index 1c4abb6d36e8719c2f1fb36d34de6f54676c0092..08b0f03177ea4490d4c501b559c6bbb95aeeb7d0 100644 (file)
@@ -4956,7 +4956,7 @@ libxlDomainIsUpdated(virDomainPtr dom)
 
 static int
 libxlDomainInterfaceStats(virDomainPtr dom,
-                          const char *path,
+                          const char *device,
                           virDomainInterfaceStatsPtr stats)
 {
     libxlDriverPrivatePtr driver = dom->conn->privateData;
@@ -4979,10 +4979,10 @@ libxlDomainInterfaceStats(virDomainPtr dom,
         goto endjob;
     }
 
-    if (!(net = virDomainNetFindByName(vm->def, path)))
+    if (!(net = virDomainNetFind(vm->def, device)))
         goto endjob;
 
-    if (virNetDevTapInterfaceStats(path, stats,
+    if (virNetDevTapInterfaceStats(device, stats,
                                    !virDomainNetTypeSharesHostView(net)) < 0)
         goto endjob;
 
index 95a2d8a78a0f1b3c75629f6cdecc0c69d8f99e60..6cf499367963e343317d5ab709b800d467475fba 100644 (file)
@@ -2849,7 +2849,7 @@ lxcDomainGetBlkioParameters(virDomainPtr dom,
 
 static int
 lxcDomainInterfaceStats(virDomainPtr dom,
-                        const char *path,
+                        const char *device,
                         virDomainInterfaceStatsPtr stats)
 {
     virDomainObjPtr vm;
@@ -2872,10 +2872,10 @@ lxcDomainInterfaceStats(virDomainPtr dom,
         goto endjob;
     }
 
-    if (!(net = virDomainNetFindByName(vm->def, path)))
+    if (!(net = virDomainNetFind(vm->def, device)))
         goto endjob;
 
-    if (virNetDevTapInterfaceStats(path, stats,
+    if (virNetDevTapInterfaceStats(device, stats,
                                    !virDomainNetTypeSharesHostView(net)) < 0)
         goto endjob;
 
index 8d1af7d7c75361e852512190c7d1a1917e09b53d..ffd64da04b8745a59acfadfa127f9905b7037035 100644 (file)
@@ -1980,7 +1980,7 @@ openvzGetVEStatus(virDomainObjPtr vm, int *status, int *reason)
 
 static int
 openvzDomainInterfaceStats(virDomainPtr dom,
-                           const char *path,
+                           const char *device,
                            virDomainInterfaceStatsPtr stats)
 {
     struct openvz_driver *driver = dom->conn->privateData;
@@ -2006,10 +2006,10 @@ openvzDomainInterfaceStats(virDomainPtr dom,
         goto cleanup;
     }
 
-    if (!(net = virDomainNetFindByName(vm->def, path)))
+    if (!(net = virDomainNetFind(vm->def, device)))
         goto cleanup;
 
-    if (virNetDevTapInterfaceStats(path, stats,
+    if (virNetDevTapInterfaceStats(device, stats,
                                    !virDomainNetTypeSharesHostView(net)) < 0)
         goto cleanup;
 
index 00de5150c87ca7c1b2d0ecfde625044925b748c5..7b79c09505d020c64caa07654e1e88ead801b69a 100644 (file)
@@ -11021,7 +11021,7 @@ qemuDomainBlockStatsFlags(virDomainPtr dom,
 
 static int
 qemuDomainInterfaceStats(virDomainPtr dom,
-                         const char *path,
+                         const char *device,
                          virDomainInterfaceStatsPtr stats)
 {
     virDomainObjPtr vm;
@@ -11040,14 +11040,14 @@ qemuDomainInterfaceStats(virDomainPtr dom,
         goto cleanup;
     }
 
-    if (!(net = virDomainNetFindByName(vm->def, path)))
+    if (!(net = virDomainNetFind(vm->def, device)))
         goto cleanup;
 
     if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_VHOSTUSER) {
-        if (virNetDevOpenvswitchInterfaceStats(path, stats) < 0)
+        if (virNetDevOpenvswitchInterfaceStats(device, stats) < 0)
             goto cleanup;
     } else {
-        if (virNetDevTapInterfaceStats(path, stats,
+        if (virNetDevTapInterfaceStats(device, stats,
                                        !virDomainNetTypeSharesHostView(net)) < 0)
             goto cleanup;
     }
index 07463b78197642837f8e550eccf206af39885d80..e3014f66bc67b0e51c8687fcce4156120ef72370 100644 (file)
@@ -682,7 +682,7 @@ struct remote_domain_block_stats_flags_ret {
 
 struct remote_domain_interface_stats_args {
     remote_nonnull_domain dom;
-    remote_nonnull_string path;
+    remote_nonnull_string device;
 };
 
 struct remote_domain_interface_stats_ret { /* insert@2 */
index 6038bf1380b266f9dc913718f8a4124addb1e699..dc78d51c4a6616bf50125c8ab5d6b48dc1630c29 100644 (file)
@@ -348,7 +348,7 @@ struct remote_domain_block_stats_flags_ret {
 };
 struct remote_domain_interface_stats_args {
         remote_nonnull_domain      dom;
-        remote_nonnull_string      path;
+        remote_nonnull_string      device;
 };
 struct remote_domain_interface_stats_ret {
         int64_t                    rx_bytes;
index d572edf21b6023d9f0c5b06280285d9df3d69240..6253b84950a3c92d7101aa557bdafdf39e12c252 100644 (file)
@@ -3160,9 +3160,10 @@ static int testDomainBlockStats(virDomainPtr domain,
     return ret;
 }
 
-static int testDomainInterfaceStats(virDomainPtr domain,
-                                    const char *path,
-                                    virDomainInterfaceStatsPtr stats)
+static int
+testDomainInterfaceStats(virDomainPtr domain,
+                         const char *device,
+                         virDomainInterfaceStatsPtr stats)
 {
     virDomainObjPtr privdom;
     struct timeval tv;
@@ -3180,7 +3181,7 @@ static int testDomainInterfaceStats(virDomainPtr domain,
         goto error;
     }
 
-    if (!(net = virDomainNetFindByName(privdom->def, path)))
+    if (!(net = virDomainNetFind(privdom->def, device)))
         goto error;
 
     if (gettimeofday(&tv, NULL) < 0) {
index 9ebb51d60a00b2b8021106307447666e78be03c9..c3396222985db5cd994dd52cb558addc540386ad 100644 (file)
@@ -1873,7 +1873,7 @@ vzDomainBlockStatsFlags(virDomainPtr domain,
 
 static int
 vzDomainInterfaceStats(virDomainPtr domain,
-                         const char *path,
+                         const char *device,
                          virDomainInterfaceStatsPtr stats)
 {
     virDomainObjPtr dom = NULL;
@@ -1888,7 +1888,7 @@ vzDomainInterfaceStats(virDomainPtr domain,
 
     privdom = dom->privateData;
 
-    ret = prlsdkGetNetStats(privdom->stats, privdom->sdkdom, path, stats);
+    ret = prlsdkGetNetStats(privdom->stats, privdom->sdkdom, device, stats);
 
  cleanup:
     virDomainObjEndAPI(&dom);
index 6ead47a0f59a00a300ae3be752beed8ee7913057..5f377147c6d1c75d5ce57696ada69848c57c4e33 100644 (file)
@@ -4484,7 +4484,7 @@ prlsdkFindNetByPath(PRL_HANDLE sdkdom, const char *path)
 }
 
 int
-prlsdkGetNetStats(PRL_HANDLE sdkstats, PRL_HANDLE sdkdom, const char *path,
+prlsdkGetNetStats(PRL_HANDLE sdkstats, PRL_HANDLE sdkdom, const char *device,
                   virDomainInterfaceStatsPtr stats)
 {
     int ret = -1;
@@ -4492,8 +4492,13 @@ prlsdkGetNetStats(PRL_HANDLE sdkstats, PRL_HANDLE sdkdom, const char *path,
     char *name = NULL;
     PRL_RESULT pret;
     PRL_HANDLE net = PRL_INVALID_HANDLE;
+    virMacAddr mac;
+
+    if (virMacAddrParse(device, &mac) == 0)
+        net = prlsdkFindNetByMAC(sdkdom, device);
+    else
+        net = prlsdkFindNetByPath(sdkdom, device);
 
-    net = prlsdkFindNetByPath(sdkdom, path);
     if (net == PRL_INVALID_HANDLE)
        goto cleanup;
 
index 8a624818686cdd34a5b5c13f195c549af89f00a2..901b6ba4b0408e772e468eec9297fe2a300f4469 100644 (file)
@@ -2109,7 +2109,7 @@ xenUnifiedDomainBlockStats(virDomainPtr dom, const char *path,
 }
 
 static int
-xenUnifiedDomainInterfaceStats(virDomainPtr dom, const char *path,
+xenUnifiedDomainInterfaceStats(virDomainPtr dom, const char *device,
                                virDomainInterfaceStatsPtr stats)
 {
     virDomainDefPtr def = NULL;
@@ -2122,7 +2122,7 @@ xenUnifiedDomainInterfaceStats(virDomainPtr dom, const char *path,
     if (virDomainInterfaceStatsEnsureACL(dom->conn, def) < 0)
         goto cleanup;
 
-    if (!(net = virDomainNetFind(def, path)))
+    if (!(net = virDomainNetFind(def, device)))
         goto cleanup;
 
     ret = xenHypervisorDomainInterfaceStats(def, net->ifname, stats);
index 279bbe7dec9335402327625a54c0e06b00cd33ad..9304ca5250c7752ed4d611ea4b10a4afb475d274 100644 (file)
@@ -779,7 +779,8 @@ Get network interface stats for a running domain. The network
 interface stats are only available for interfaces that have a
 physical source interface. This does not include, for example, a
 'user' interface type since it is a virtual LAN with NAT to the
-outside world.
+outside world. I<interface-device> can be the interface target by
+name or MAC address.
 
 =item B<domif-setlink> I<domain> I<interface-device> I<state> [I<--config>]