]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Add an API for retrieving the MAC address of an interface
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 2 Nov 2011 13:00:09 +0000 (13:00 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 9 Nov 2011 16:33:44 +0000 (16:33 +0000)
* src/util/bridge.c, src/util/bridge.h: Add virNetDevGetMAC

src/util/bridge.c
src/util/bridge.h

index a9e9bb2a3dd2ad253d1bd0b575eccffe5f128fff..4eafc3a14cbe47edfedd9cf9fea7221abc8f0aae 100644 (file)
@@ -357,6 +357,41 @@ cleanup:
     return ret;
 }
 
+/**
+ * virNetDevGetMAC:
+ * @ifname: interface name to set MTU for
+ * @macaddr: MAC address (VIR_MAC_BUFLEN in size)
+ *
+ * This function gets the @macaddr for a given interface @ifname.
+ *
+ * Returns 0 in case of success or -1 on failure
+ */
+int virNetDevGetMAC(const char *ifname,
+                    unsigned char *macaddr)
+{
+    int fd = -1;
+    int ret = -1;
+    struct ifreq ifr;
+
+    if ((fd = virNetDevSetupControl(ifname, &ifr)) < 0)
+        return -1;
+
+    if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) {
+        virReportSystemError(errno,
+                             _("Cannot get interface MAC on '%s'"),
+                             ifname);
+        goto cleanup;
+    }
+
+    memcpy(macaddr, ifr.ifr_hwaddr.sa_data, VIR_MAC_BUFLEN);
+
+    ret = 0;
+
+cleanup:
+    VIR_FORCE_CLOSE(fd);
+    return ret;
+}
+
 /**
  * virNetDevGetMTU:
  * @ifname: interface name get MTU for
index d83fbd0a5d52e90d4534a9f787a16f48d6236016..ba1a1087743a77ab7e61be4d64861f93630241aa 100644 (file)
@@ -112,6 +112,9 @@ int virNetDevTapCreate(char **ifname,
 int virNetDevSetMAC(const char *ifname,
                     const unsigned char *macaddr)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
+int virNetDevGetMAC(const char *ifname,
+                    unsigned char *macaddr)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
 int virNetDevSetMTU(const char *ifname,
                     int mtu)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;